ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

Eloquent上でバリデーションを設定する

Laravelのバリデーション(入力値の検証)は大変便利という評判だけど、公式ドキュメント上だとコントローラー側でバリデーションする例が書いてある。それよりもEloquent上でバリデーションしたい。

Eloquentの中にvalidateメソッドを作ってみた。

class User extends Eloquent {

    protected $guarded = array('id');

    public function validate($input, $id = null) {

        $rules = [
            'blog_url' => 'url',
            'user_address' => 'email',
        ];

        return Validator::make($input, $rules);
    }

}


コントローラー側でvalidateメソッドを使う

public function update($id) {

	$user = User::find($id);

	$inputs = Input::all();

	$validation = $user->validate($inputs, $id);

	if ($validation->fails()) {

		// 失敗したときの処理

	} else {

		$user->update($inputs);

	}

	return Redirect::action('UserController@show', array($id));
}

このエントリ
Trick: Validation within models. | Dayle Rees
で、Eloquent上でのバリデーションを説明しているんだけど、$rulesをプライベート変数として設定していた。確かにそっちのほうがスマートだ。以下みたいになる。

class User extends Eloquent {

    protected $guarded = array('id');

	private $rules = array(
            'blog_url' => 'url',
            'user_address' => 'email',
    );

    public function validate($input, $id = null) {

        return Validator::make($input, $this->rules);
    }

}