【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();
}
とても簡単ですね。他にもう少し複雑なバリデーションの仕方もあります。
これは次回書きたいと思います。
それでは、本日はここまで。
ありがとうございました。