3️⃣

【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その3)

2024/07/23に公開
1

概要

【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その2)の続編です。
現在、indexとnewアクションの実装が完了してる状態です。今回はcreateアクションを実装します。

バージョン情報

その2から同じなので、割愛

PostController::storeを実装

コントローラ側

app/Http/Requests/Post/StoreRequest.phpを作成

  • 下記コマンドでRequestファイルを生成。
php artisan make:request Post/StoreRequest

以下のように編集

app/Http/Requests/Post/StoreRequest.php
<?php

namespace App\Http\Requests\Post;

use App\Models\Post;
use Illuminate\Foundation\Http\FormRequest;

class StoreRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
     */
    public function rules(): array
    {
        return [
            'title' => ['required', 'string', 'max:20'],
            'body' => ['required', 'string', 'max:1500'],
        ];
    }

    /**
     * Create a new Post instance from the validated request data.
     *
     * @return Post
     */
    public function makePost(): Post
    {
        return new Post($this->validated());
    }
}

app/UseCases/Post/StoreAction.phpを作成

app/UseCases/Post/StoreAction.php
<?php

namespace App\UseCases\Post;

use App\Http\Requests\Post\StoreRequest;

class StoreAction
{
    public function __invoke(StoreRequest $request): void
    {
        $post = $request->makePost();

        $post->title = $request['title'];
        $post->body = $request['body'];

        $post->save();
    }
}

app/Http/Controllers/PostController.phpを編集

app/Http/Controllers/PostController.php
<?php

namespace App\Http\Controllers;

use App\UseCases\Post\IndexAction;
use App\UseCases\Post\StoreAction;
use App\Http\Requests\Post\StoreRequest;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Inertia\Response;

class PostController extends Controller
{
    public function index(IndexAction $action): Response
    {
        return Inertia::render('Post/Index', $action());
    }

    public function new(): Response
    {
        return Inertia::render('Post/Create');
    }

    public function store(StoreRequest $request, StoreAction $action): RedirectResponse
    {
        $action($request);

        return redirect()->route('posts.view.index')->with([
            'message' => '登録が完了しました',
        ]);
    }

    public function show()
    {
    }

    public function edit()
    {
    }

    public function update()
    {
    }

    public function destroy()
    {
    }
}

確認

npm run dev をして、http://localhost/posts/new にアクセスして、「送信する」をクリックしてみてください。バリデーションのエラーが機能していることがわかると思います。
正しく入力した場合は保存に成功して、http://localhost/postsにリダイレクトすることが確認できます。

残りは、投稿詳細(PostController::show)、投稿編集(PostController::edit, PostController::update)、投稿削除(PostController::destroy)です。
【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その4)続きます。

関連記事

Discussion

napojinnapojin

makePost を記事に反映できていなかったので、追記