👬

Laravel 8.70 モデル/コントローラー生成時に、Form Request も同時に生成できるようになったので試してみた

2021/11/11に公開

まえがき

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