初めてのLaravel 5.1 : (18) FormRequest

前回はFormの入力値チェックを行いました。今回は、FormRequestという機能を使って、入力値のチェックをリファクタリングしてみます。

FormRequestの作成

artisan を使って、Article用の FormRequestを生成します。

php artisan make:request ArticleRequest

app/Http/Requests/ArticleRequest.phpが作成されました。

<?php // app/Http/Requests/ArticleRequest.php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class ArticleRequest extends Request {

	public function authorize()
	{
		return false;
	}

	public function rules()
	{
		return [
			//
		];
	}

}

ArticleRequest.php の編集

Article用に内容を編集します。

<?php namespace App\Http\Requests;

use App\Http\Requests\Request;

class ArticleRequest extends Request {

	public function authorize()
	{
		return true;  // ①
	}

	public function rules()
	{
		return [  // ②
			'title' => 'required|min:3',
			'body' => 'required',
			'published_at' => 'required|date',
		];
	}
}

① authorizeメソッドではリクエストに対する権限を設定します。例えば、現在ログイン中のユーザに権限が無ければ、falseを返します。今のところ誰でもArticlesデータを追加できるように trueを返しておきます。

② rulesメソッドでは、バリデーションルールを返します。


Controller

ArticlesController.phpの storeメソッドで ArticleRequestを使うように修正します。

<?php namespace AppHttpControllers;
// app/Http/Controllers/ArticlesController.php

use App\Article;
use App\Http\Controllers\Controller;

use App\Http\Requests\ArticleRequest;  // ①'

class ArticlesController extends Controller {

	// ...

	public function store(ArticleRequest $request) {  // ①
		// ここでの validate が不要になった

		Article::create($request->all());
		return redirect('articles');
	}
}

① storeメソッドで受け取るクラスを Illuminate\Http\Request から App\Http\Requests\ArticleRequest に変更しました。これだけで、今まで storeメソッド内で行っていた、validateが不要になります。エラーがあった時の前画面へのリダイレクトも ArticleRequestが行ってくれます。コントローラがスリムになり、超クールです。

念の為、いままで通り入力チェックが効くか、動作確認をお忘れなく

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中