プログラミング学習中

【41歳学習中_SAMURAI TERAKOYA】LaravelでTwitter風アプリを作ろう #3-9日目

今回はCRUDのRead,Create,Updateを行う。

6章 投稿のCRUD機能を作ろう(Read編)

Postのコントローラーを作成。

PostController.phpを編集。

contorollerでデータを取得して、viewの呼び込みとcompact関数でデータを渡しているんだな

テストを作ろう

PHPUnitというPHPのテスティングフレームワークを使ってテストを実施。

大事な個所だと思うが決まり事多い…
とりあえずテキスト通り進める

7章 投稿のCRUD機能を作ろう(Create編)

フォームリクエストを作成の為、以下のコマンドを実行

フォルダ「app\Http\Requests」の直下にあるPostRequest.phpを編集する

■PostRequest.php
<?php

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;

class PostRequest extends FormRequest
{
    // authorize()メソッドは、コントローラのアクションを実行する前に、そのユーザーが適切な権限を持っているかどうかをチェックするためのメソッド。
    public function authorize(): bool
    {
        // return false;
        return true;
    }

    public function rules(): array
    {
        return [
            'title' => 'required',
            'content' => 'required'
        ];
    }
}

C:\xampp\htdocs\laravel-posting-app\app\Http\Controllers\PostController.phpに以下を追加

■PostController.php
--- 略 ---
     // 作成ページ
     public function create()
     {
         return view('posts.create');
     }

     // 作成機能 (ビューで実行したとき用)
     public function store(PostRequest $request)
     {
         $post = new Post();
         $post->title = $request->input('title');
         $post->content = $request->input('content');
         $post->user_id = Auth::id();
         $post->save();

        // with()メソッドは以下のように第1引数にキー名、第2引数に値を指定することで、セッションにそのデータを保存できる
         return redirect()->route('posts.index')->with('flash_message', '投稿が完了しました。');
     }
--- 略 ---

C:\xampp\htdocs\laravel-posting-app\resources\views\posts\index.blade.phpにフラッシュメッセージのコード追加。

■index.blade.php
--- 略 ---
 @if (session('flash_message'))
    <p>{{ session('flash_message') }}</p>
 @endif
--- 略 ---

8章 投稿のCRUD機能を作成しよう(Update編)

コントローラーを編集する(編集画面に遷移する為)

■PostController.php
--- 略 ---
     // 編集ページ
     public function edit(Post $post)
     {
        // 引数postがログインidと異なったら、エラーメッセージを表示し、ビューposts.indexに戻す
         if ($post->user_id !== Auth::id()) {
             return redirect()->route('posts.index')->with('error_message', '不正なアクセスです。');
         }
        //  引数postでビュー「posts.edit」を参照
         return view('posts.edit', compact('post'));
     }
--- 略 ---

エラーメッセージを表示させる(indexに)

■index.blade.php
--- 略 ---
         <!-- flash_message -->
         @if (session('flash_message'))
             <p>{{ session('flash_message') }}</p>
         @endif
        <!-- error_message -->
         @if (session('error_message'))
             <p>{{ session('error_message') }}</p>
         @endif
--- 略 ---

コントローラーを編集する(編集結果を表示させる為)

■PostController.php
--- 略 ---
     // 更新機能
     public function update(PostRequest $request, Post $post)
     {
         if ($post->user_id !== Auth::id()) {
             return redirect()->route('posts.index')->with('error_message', '不正なアクセスです。');
         }
         
        //  ビューで入力された値を格納する
         $post->title = $request->input('title');
         $post->content = $request->input('content');
         $post->save();
        //  ビュー「posts.show」にリダイレクトし、フラッシュメッセージを表示する
         return redirect()->route('posts.show', $post)->with('flash_message', '投稿を編集しました。');
     }
--- 略 ---

フラッシュメッセージを表示させる(showに)

■show.blade.php
--- 略 ---
         <h1>投稿詳細</h1>

         @if (session('flash_message'))
             <p>{{ session('flash_message') }}</p>
         @endif

         <a href="{{ route('posts.index') }}">&lt; 戻る</a>
--- 略 ---

稿編集ページのビューを作成

■edit.blade.php
--- 略 ---
         <!-- 更新が押されたら引数$postとしてコントローラー「posts.update」を実行する -->
         <form action="{{ route('posts.update', $post) }}" method="POST">
             @csrf
             @method('PATCH')
             <div>
                 <label for="title">タイトル</label>
                 <!-- old()ヘルパ関数がnullの場合は、第2引数を返す。この場合は「$post->title」 -->
                 <input type="text" id="title" name="title" value="{{ old('title', $post->title) }}">
             </div>
             <div>
                 <label for="content">本文</label>
                 <!-- old()ヘルパ関数の使い方は上のtextと同じ -->
                 <textarea id="content" name="content">{{ old('content', $post->content) }}</textarea>
             </div>
             <button type="submit">更新</button>
         </form>
--- 略 ---

感想

Create,Read,Updateについては、このテキストを見ながらなら同じような処理が作成できると感じた。

「ロト6当てたいサイト!」の作成に戻り、今回学んだテキストを参考に入力した番号で過去の抽選結果を検索できるようにしたいと思う。

  • この記事は東京在住の若干雨キャンパーが書きました

ame-sun

1982年生まれ東京都板橋区在住。

キャンプの日は雨が多い気がする。
あ、長男が2014年の大雪の日に生まれてからかも…
お宮参り、お食い初め、GWの旅行、ディズニーランドも…
キャンプ場に到着すると雨が降ってくる…

でも、運命だ。私は若干雨キャンパーでいく!

2021年からブログを始め、細く長く楽しみながら書いていきます。
どうぞ宜しくお願い致します( ̄へ ̄;)ゞ

■こんなブログです
キャンプ場+@(景色、温泉、川遊びなど)の紹介
キャンプ場リスト
高速IC(インターチェンジ)の周辺情報
 (同じIC周辺を都度調べてたので記事にしてみました♪)
キャンプ道具の紹介
子供と行ける遊び場の紹介 など

■キャンプ回数
 2022年 11回

※Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

-プログラミング学習中