開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. 【Laravel】バリデーションの拡張
no-image

【Laravel】バリデーションの拡張

こんにちは
ニシザワです。

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

それでは、本日はここまで。
ありがとうございました。
 
TOPに戻る