3️⃣
【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その3)
概要
【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)続きます。
関連記事
- Inertiaを使ったLaravel 10 + Reactのベストチュートリアル
- 【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その1)
- 【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その2)
- 【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その4)
- 【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その5)
- 【Laravel10】 Inertia + React で「追加・変更・削除・閲覧」機能をつくる(その6)
Discussion
makePost を記事に反映できていなかったので、追記