リクエストデータをバリデーション続き(登録フォームを作る③)
前の記事で実装したバリデーションとまったく同じ処理を、違う実装方法で書き直してみます。
コントローラ内にバリデーション処理は書かずに、Requestクラスを作りその中にバリデーションルールを記述する方法です。
具体的に見ていきましょう。
artisanコマンドでRequestクラスを生成します。
php artisan make:request MemberRequest
「app/Http/Requests」フォルダ内にMemberRequest.phpが生成されました。
中を見てみましょう。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MemberRequest 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 [
//
];
}
}
MemberRequestクラスが定義されていて、authorize()メソッドとrules()メソッドの2つが用意されています。
今回はrules()メソッドのみ使います。authorize()メソッドは使いませんが、使わない場合は戻り値をtrueに変えておく必要があります。
public function authorize()
{
return true;
}
rules()メソッドにはバリデーションルールを記述します。
ルール文字列の連想配列を戻り値とします。
public function rules()
{
return [
'name' => 'required|string|max:10',
'age' => 'required|integer|min:20|max:60'
];
}
MemberRequestクラスはこれで完成です。
次に、このMemberRequestクラスを使うようにコントローラを書き換えていきましょう。
コントローラのclass定義の上に、次のような記述があります。
use Illuminate\Http\Request;この下に次の1行を追記します。
use App\Http\Requests\MemberRequest;これで先ほど作ったMemberRequestクラスをコントローラの中で使えるようになります。
MemberRequest.phpは「app/Http/Requests/MemberRequest.php」にあります。useはこの場所をPHPに教えてあげるために記述しています。
storeメソッドを次のように書き換えます。
// 保存処理
public function store(MemberRequest $request) {
dump($request->all());
}メソッド内に記述していたバリデーション処理は削除しました。
代わりに、引数で受け取るRequestインスタンスをMemberRequestインスタンスに変更しています。
これで、MemberRequestクラスに記述したルールでバリデーションが行われ、エラーがあった場合には以前のページに戻されます。
