2013-12-11 10 views
8

カスタム検証ルールを作成したいと思います。 Laravel 4カスタム検証ルール - バリデータをどこで拡張しますか?

protected $rules = array(
    'first_name' => 'required', 
    'last_name' => 'required', 
    'ssn'   => 'required|integer|min:4|max:4', 
    'email'  => 'required|email', 
    'dob'   => 'required|checkAge', 
    'phone'  => 'required', 
    'street'  => 'required', 
    'postal_code' => 'required|integer|min:4', 
    'city'  => 'required' 
); 

しかし、私は、カスタム検証ルールを配置する必要があります。ここで 私のモデルは、現時点では、このように見えますか? 私はそれを拡張する必要があることを読みました。このため 私は

Validator::extend('foo', function($attribute, $value, $parameters) 
{ 
    return $value == 'foo'; 
}); 

簡単な関数を作成しましたそして、私はそれをチェックする必要がどこ、私は知らないのですか?

多分誰かが私を助けることができます。

おかげで

+0

に配列にカスタムエラーメッセージを追加しますか? – Yada

答えて

13

私はそこに任意のカスタム検証ファイルを/アプリで検証フォルダを作成することによって、それを行います。
app/start/global.phpを編集して自動読み込みします。

ClassLoader::addDirectories(array(
    app_path() . '/commands', 
    app_path() . '/controllers', 
    app_path() . '/models', 
    app_path() . '/presenters', 
    app_path() . '/validation', 
    app_path() . '/database/seeds', 
)); 

また、このファイルにリゾルバを登録します。

Validator::resolver(function($translator, $data, $rules, $messages) { 
     return new CoreValidator($translator, $data, $rules, $messages); 
    }); 

(検証フォルダ内の)サンプルカスタムバリデータークラス。

<?php 

class CoreValidator extends Illuminate\Validation\Validator 
{ 

    protected $implicitRules = array('Required', 'RequiredWith', 'RequiredWithout', 'RequiredIf', 'Accepted', 'RequiredWithoutField'); 

    public function __construct(\Symfony\Component\Translation\TranslatorInterface $translator, $data, $rules, $messages = array()) 
    { 
     parent::__construct($translator, $data, $rules, $messages); 
     $this->isImplicit('fail'); 
    } 

    public function validatePostcode($attribute, $value, $parameters = null) 
    { 
     $regex = "/^((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))$/i"; 
     if (preg_match($regex, $value)) { 
      return true; 
     } 
     return false; 
    } 
} 

そして、我々はLaravel 5で、その中に入れなければならないアプリ/ LANG中/ EN/validation.php

return array(
... 
"postcode" => "Invalid :attribute entered.", 
... 
) 
+0

私はまた、私がすべての妥当性検査をするのと同じような検証フォルダを作成しました。私はモデルからバリデーションを分離したい – Metropolis

8

拡張機能は、アプリケーションが起動するとすぐに追加することができます。私は何をしてroutes.phpfilters.phpの同じレベルにvalidations.phpファイルを作成し、これを追加することです私のapp/start/global.php

require app_path().'/filters.php'; /// this one is already there... 
require app_path().'/validations.php'; 
関連する問題