Laravel7では新しい機能が様々導入されており、Webアプリケーションの開発がよりスムーズなものとなってきています。その中でも、もどかしい場所へ手を届いたと感じさせてくれたのが、既存makeコマンドのstubを簡単にカスタマイズできるようになったことです。
今回は既存make用stubの取得コマンドと、リクエスト用雛形のカスタマイズについてご紹介します。
make用テンプレートの取得
Laravel7系より前では、requestやmodelなどのmakeコマンドで作られる雛形をカスタムするためには、新しい雛形用のmakeコマンドを作成する必要がありました。ですが、Laravel7からは雛形そのものを修正できるようになったため、カスタマイズが今まで以上に簡単になりました。
まず、テンプレートであるstubファイルを自分の開発環境下に取得するためのコマンドを実行します。
$ php artisan stub:publish
上記コマンドを実行して、成功メッセージが出ればLaravelルートにstubsディレクトリが生成され、以下のファイル群が生成されます。
Stubs published successfully.
stubs/console.stub
stubs/controller.api.stub
stubs/controller.invokable.stub
stubs/controller.model.api.stub
stubs/controller.model.stub
stubs/controller.nested.api.stub
stubs/controller.nested.stub
stubs/controller.plain.stub
stubs/controller.stub
stubs/factory.stub
stubs/job.queued.stub
stubs/job.stub
stubs/middleware.stub
stubs/migration.create.stub
stubs/migration.stub
stubs/migration.update.stub
stubs/model.pivot.stub
stubs/model.stub
stubs/policy.plain.stub
stubs/policy.stub
stubs/request.stub
stubs/rule.stub
stubs/seeder.stub
stubs/test.stub
stubs/test.unit.stub
あとは、カスタマイズしたいmakeコマンド用のstubファイルをカスタマイズするだけです。
make:requestのカスタマイズ
では1例としてmake:requestのstubファイルをカスタマイズしてみます。ご自身の開発で不要になる部分については無視してください。
request.stubの初期状態は以下の通りです。
<?php
namespace {{ namespace }};
use Illuminate\Foundation\Http\FormRequest;
class {{ class }} extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
この雛形を、以下4つの条件を想定してカスタマイズをします。
- 認証有り
- 日本語パラメーターの設定
- エラーメッセージのカスタマイズ
- リクエストデータの加工
認証有り
認証有り用のカスタマイズは、authorize()でtrueを返却するだけです。
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
もし認証を必要としない場合や、特別な処理が必要な場合は、頻度の多いものを記述しておくと開発が楽になります。
日本語パラメーターの設定
次にパラメーターを日本語化するためのattributesメソッドを、rulesの後ろに追加します。
/**
* パラメーターの日本語化
*
* @return array
*/
public function attributes()
{
return [
//
];
}
例えば名前の入力フォーム(name)を必須項目にした場合、標準では「nameは、必ず指定してください」と返ってきてしまいます。そうならないためにも、requestの雛形にはカスタマイズ用のattributesを準備しておくと便利です。システム内で多様するものであれば、validation.phpのattributesへ設定するようにしておきましょう。
バリデーションメッセージを一括で日本語化したい場合は、以下の「バリデーションメッセージの日本語化」をご参考ください。
メッセージのカスタム
次にメッセージのカスタマイズ用メソッドをattributesの後ろに追記します。
/**
* 定義済みバリデーションルールのエラーメッセージ取得
*
* @return array
*/
public function messages()
{
return [
//
];
}
場合によっては標準のエラーメッセージだと意味が通らないものも出てきます。そういった時のためにrequestの雛形へ準備しておくと便利です。
リクエストデータの加工
最後はリクエストデータの加工用メソッドをmessagesの後ろに追記します。
/**
* リクエストデータの加工
*
* @return void
*/
protected function prepareForValidation()
{
//
}
こちらの使用頻度は他と比べれば少ないですが、場合によっては必要になりますので、テンプレートとして準備しておきます。不要の場合は削除するだけですので、数回でも利用することがあれば最初から準備しておくに越したことはありません。
以下が最終のリクエスト用stubの内容になります。
<?php
namespace {{ namespace }};
use Illuminate\Foundation\Http\FormRequest;
class {{ class }} extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
/**
* パラメーターの日本語化
*
* @return array
*/
public function attributes()
{
return [
//
];
}
/**
* 定義済みバリデーションルールのエラーメッセージ取得
*
* @return array
*/
public function messages()
{
return [
//
];
}
/**
* リクエストデータの加工
*
* @return void
*/
protected function prepareForValidation()
{
//
}
}
他にも利用頻度の高いメソッドや、クラスなどがある場合は事前に準備しておくと開発スピードはもちろんエラー回避につながります。
まとめ
いかがだったでしょうか。
今回は「【Laravel7】既存makeテンプレートのカスタマイズ」について、既存makeコマンドのstub取得方法とそのリクエストの一例をご紹介しました。
Laravel7系はまだリリースされて間もないですが、開発の助けになる要素が数多く含まれています。
これから7系を使った開発を検討している人は、ぜひ参考にしてくださいね。