WEB/システム/IT技術ブログ

Laravelのフォームリクエストを使ってバリデーション処理を管理する

update : 2020/05/17

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」内の処理が実行されます。

フォームリクエストをしっかり理解すれば、コードをすっきりさせることができそうですね。

B!

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives