tiger9810 / Laravel-Chirper

0 stars 0 forks source link

編集機能の追加 #10

Open tiger9810 opened 1 year ago

tiger9810 commented 1 year ago

routes/web.phpに編集と更新のルートを追加する(Routing)

Route::resource('chirps', ChirpController::class)
    ->only(['index', 'store', 'edit', 'update'])
    ->middleware(['auth', 'verified']);

index.blade.phpに編集リンクを作成する(View)

resources/views/chirps/index.blade.phpを編集してリンクを作成する(参考:編集機能の追加)

編集ページの作成(View)

resources/views/chirps/に新しくedit.blade.phpを作成する。(参考:編集機能の追加)

ChirpsControllerにedit,updateメソッドの追加(Controller)

app/Http/Controllers/ChirpController.php(参考:編集機能の追加)

    public function edit(Chirp $chirp): View
    {
        $this->authorize('update', $chirp);

        return view('chirps.edit', [
            'chirp' => $chirp,
        ]);
    }

    public function update(Request $request, Chirp $chirp): RedirectResponse
    {
        //
        $this->authorize('update', $chirp);

        $validated = $request->validate([
            'message' => 'required|string|max:255',
        ]);

        $chirp->update($validated);

        return redirect(route('chirps.index'));
    }

編集に権限を加える

Model Policyを作成することで、Chirpsの作成者しか編集できないようにする。 以下のコマンドを実行すると、app/Policies/ChirpPolicy.phpが作成される。 ./vendor/bin/sail artisan make:policy ChirpPolicy --model=Chirp app/Policies/ChirpPolicy.phpを開いて、return $chirp-user()->is($user);を追加する。

class ChirpPolicy
{
 ...
    /**
     * Determine whether the user can update the model.
     */
    public function update(User $user, Chirp $chirp): bool
    {
        return $chirp->user()->is($user);
    }
 ...
}
tiger9810 commented 1 year ago

モデル(Model):

データの管理を担当します。これには、データベースとの対話、問い合わせの実行、データの検証、データの表現形式、ビジネスロジックの実装などが含まれます。

ビュー(View):

ユーザーが見る画面、つまりユーザーインターフェースを担当します。これには、ユーザーへの出力(HTMLやJSONなど)を生成することが含まれます。

コントローラ(Controller):

モデルとビューを結びつける役割を果たします。コントローラは、ユーザーからの入力を受け取り、それに基づいてモデルを更新したり、適切なビューを選択したりします。

ルーティング(Routing):

Laravelでは、ルーティングはユーザーからのHTTPリクエストを適切なコントローラのアクション(メソッド)にマッピング(対応づけ)する役割を果たします。このマッピングは、routes/web.phpファイル(またはapi.php、console.php、channels.phpなど)に定義されます。

スクリーンショット 2023-06-05 23 10 10