【Laravel】バリデーションの拡張
こんにちは
ニシザワです。
本日はLaravelのバリデーションの拡張です。
Laravelは標準でも多くのバリデーションを用意してくれていますが
英語圏でのバリデーションが多く、日本語でのバリデーションがありません。
例えば、カタカナ、日本の電話番号等。
そういうときはバリデーションを拡張して、対応しましょう。
こちらも、とても簡単に書けるようにできていますので、是非使ってみてください。
では、まずモデルでバリデーションを定義します。
app/models/Test.php
カタカナと日本の電話番号を今回は拡張します。
次に、拡張するコードです。
app/start/global.php
第三引数で値を渡したい場合は以下の様にモデルで記述します。
後は、コントローラーで標準の様にコントローラーで呼んであげると使えます。
app/controllers/TestsController.php
他にもう少し複雑なバリデーションの仕方もあります。
これは次回書きたいと思います。
それでは、本日はここまで。
ありがとうございました。
ニシザワです。
本日はLaravelのバリデーションの拡張です。
Laravelは標準でも多くのバリデーションを用意してくれていますが
英語圏でのバリデーションが多く、日本語でのバリデーションがありません。
例えば、カタカナ、日本の電話番号等。
そういうときはバリデーションを拡張して、対応しましょう。
こちらも、とても簡単に書けるようにできていますので、是非使ってみてください。
では、まずモデルでバリデーションを定義します。
app/models/Test.php
<?php class Test extends Eloquent { protected $fillable = ['id','name','name_kana','email','tel']; protected $errors; public function validate(array $params){ $rules = array( 'name' => 'required', 'name_kana' => 'required|name_kana', 'email' => 'email', 'tel' => 'japan_tel' ); $messages = array( 'name.required' => '名前を入力してください。', 'name_kana.required' => '名前(カナ)をを入力してください。', 'name_kana.name_kana' => 'カタカナで入力してください。', 'tel.japan_tel' => '電話番号を半角数字で正しく入力してください。', 'email.email' => 'メールアドレスを正しく入力してください。' ); $validator = Validator::make($params, $rules,$messages); if ($validator->passes()) { return true; } else { $this->errors = $validator->messages(); return false; } } public function errors(){ return $this->errors; } }背景が赤のところが、拡張するバリデーションです。
カタカナと日本の電話番号を今回は拡張します。
次に、拡張するコードです。
app/start/global.php
Validator::extend('name_kana', function($attribute, $value, $parameters) { if (preg_match("/^[ァ-ヶヲ-゚ー]+$/u", $value)) { return true; } }); Validator::extend('japan_tel', function($attribute, $value, $parameters) { if (preg_match("/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/", $value)) { return true; } });Validator::extendを使います。第一引数はバリデーションの名前、第二引数はバリデーションする値、第三引数がオプションで渡したい値です。
第三引数で値を渡したい場合は以下の様にモデルで記述します。
$rules = array( 'name_kana' => 'name_kana:2' //または複数の場合は 'name_kana' => 'name_kana:2,5' );以上で準備は終わりです。
後は、コントローラーで標準の様にコントローラーで呼んであげると使えます。
app/controllers/TestsController.php
if (!$this->test->validate($data)) { return Redirect::action('TestController@getAdd') ->withErrors($this->test->errors()) ->withInput(); }とても簡単ですね。
他にもう少し複雑なバリデーションの仕方もあります。
これは次回書きたいと思います。
それでは、本日はここまで。
ありがとうございました。