Laravelのフォームリクエストを使ってバリデーション処理を管理する
Laravelのフォームリクエストを使ってバリデーション処理を管理します。
ある日、Laravel開発中にコントローラ内でフォームバリデーションの処理を記述していました。
「コントローラの処理が増えてきたなぁ」や「この処理、他のリクエストでも使いまわすよなぁ」と考えていました。
これらの問題を解決する方法「フォームリクエスト」があるんですね。
フォームリクエストは一連のバリデーション処理を、外部クラスにまとめることができます。
フォームリクエストを利用することで、任意のリクエストで処理を呼び出すことができますし、コントローラ内のコードもスッキリさせることができます。
フォームリクエスト作成
フォームリクエストを作成します。フォームリクエストは以下のようにartisanコマンドで作成できます。
> php artisan make:request SampleRequest
コマンドを実行すると「/app/Http/Requests/SampleRequest.php」が作成されます。内容は以下の通りです。
namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class SampleRequest extends FormRequest { public function authorize() { return false; } public function rules() { return [ ]; } }
フォームリクエスト修正
作成したフォームリクエストを修正します。
関数「rules」でバリデーションを定義します。例えば項目「name」は入力必須、項目「mail」はメールアドレス形式でチェックする場合、以下のように記述します。
public function rules() { return [ 'name' => 'required', 'mail' => 'email', ]; }
バリデーション定義の詳細については、今回は割愛します。
フォームリクエストを組み込む
それでは実際に任意のpost処理に、作成したフォームリクエストを組み込みます。
例えば、コントローラ「SampleController」に組み込む場合、
class SampleController extends Controller { public function store(Request $request){ (略)
以下のように作成したフォームリクエストを読み込み適用します。
use App\Http\Requests\SampleRequest; class SampleController extends Controller { public function store(SampleRequest $request){ (略)
処理フローについて
処理フローを追ってみると、まず初めに、任意のフォームページから「SampleController」の関数「store」へ、postリクエストを送信します。
そうするとコントローラへ処理が渡される前にフォームリクエスト「SampleRequest」のバリデーション処理が実行されます。
バリデーションエラーの場合、リクエスト情報を持った状態で呼び出し元のフォームページへリダイレクトします。
バリデーションをパスした場合、「SampleController」の関数「store」内の処理が実行されます。
フォームリクエストをしっかり理解すれば、コードをすっきりさせることができそうですね。
コメントする