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); } }