Laravel 8.70 モデル/コントローラー生成時に、Form Request も同時に生成できるようになったので試してみた
まえがき
Youbute などで Laravel のチュートリアル動画などを多数配信している Povilas 氏によりタイトルにある機能が実装されました。自身初のコントリビュートのようです。
参考:Github:[8.x] New flag --requests -R to make:controller and make:model Commands #39120
本題
タイトルそのままですが、モデル/コントローラー生成時に、Form Request のファイルが同時に生成できるようになりました。
基本は、--requests オプション(省略系:-R)を付けます。--request ではなく、複数系の --requests です。(何故、複数系なのかは、すぐ下で)
と言うことで、以下、コマンドサンプルです。
make:model の場合
php artisan make:model Post -rR
Model created successfully.
Request created successfully.
Request created successfully.
Controller created successfully.
-r は、リソースコントローラーも作ってくれの合図
-R は、--requests の省略系で、Form Request も作ってくれの合図です。
(-R だけだと作ってくれません)
make:controller の場合
php artisan make:controller FooController -R --model=Foo
Model created successfully.
Request created successfully.
Request created successfully.
Controller created successfully.
--model=モデル名 を付けて、モデル名を伝える必要があります。
これにより、以下のようなファイルが生成されます。
(Docblockは、紙面の都合上、省略しています)
(以下は、php artisan make:model Post -rR の場合ですが、make:controller の場合も基本同じ)
Postモデル
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
}
StorePostRequest(新規登録時用の FormRequest)
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StorePostRequest extends FormRequest
{
public function authorize()
{
return false;
}
public function rules()
{
return [
//
];
}
}
UpdatePostRequest(更新時用の FormRequest)
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdatePostRequest extends FormRequest
{
public function authorize()
{
return false;
}
public function rules()
{
return [
//
];
}
}
PostController
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StorePostRequest;
use App\Http\Requests\UpdatePostRequest;
use App\Models\Post;
class PostController extends Controller
{
public function index()
{
//
}
public function create()
{
//
}
public function store(StorePostRequest $request)
{
//
}
public function show(Post $post)
{
//
}
public function edit(Post $post)
{
//
}
public function update(UpdatePostRequest $request, Post $post)
{
//
}
public function destroy(Post $post)
{
//
}
}
FormRequest は、新規作成時用と更新時用の2つが作成されます。
また、コントローラーで、2つの FormRequest がちゃんとタイプヒントされています。
ちなみに
FormRequest は、新規作成時も更新時も1つのファイルでやっている方も多いと思います。
元のプルリクエストでは、--requests のみならず、単数形の --request もあり、単数形を指定した場合は、1つのファイルのみ生成していたのですが、
(超意訳)
Taylor 氏:新規作成と更新があったら、僕なら必ず2つ作るよ!
Povilas 氏:だよねー。僕もだよ。じゃ、単数形は消しておくね。
となり、複数系のみがサポートされる事になりました。
雑感
細かい所で、便利になりました。
おかしな箇所等ありましたら、コメント下さい。
Discussion