2016-04-18 2 views
0

標準のZF2バリデータ/フィルタで入力フィルタを使用しています。しかし、私はまた、\My\InputFilter::isValidメソッドを拡張して、特定の日付部分を比較するなど、ドメイン固有の検証を含めるようにしています。zf2 inputfilter - 失敗したカスタム検証を返す方法

この方法では、失敗した要素に対して特定のエラーメッセージを表示して、検証に失敗したことをどのように伝えますか?メソッド内からfalseを返すことはできますが、検証が失敗した理由についてはこれ以上の情報はありません。

すなわち:AbstractValidatorクラスで

public function isValid($context = null){ 

     $latestCollectionInput = $this->get('latestCollectionTime'); 
     $requestedCollectionTime = $this->get('requestedCollectionTime'); 

     $date1 = \DateTime::createFromFormat('d/m/Y H:i', $latestCollectionInput->getRawValue()); 
     $date2 = \DateTime::createFromFormat('d/m/Y H:i', $requestedCollectionTime->getRawValue()); 

     if($date1->format('N') !== $date2->format('N')){ 
      /* how to return failed validation for these elements */    
     } 

     return parent::isValid($context); 
    } 

答えて

0

は、この目的のためにerror方法があります。あなたはそれを見つけることができますhere on line 329 on GitHub

だから、検証中にあなたが発見したときに値は、あなたが行うことができます無効です:に格納されている

const ERROR_DATE_NOT_VALID = 'dateNotValid'; 
const ERROR_NOT_FUTURE_DATE = 'dateNotFutureDate'; 

を、対応するメッセージ:通常のキーは定数としてバリデータクラスに格納されている

$this->error($key, $value); 

a $messageTemplatesアレイ:

protected $messageTemplates = array(
    self::ERROR_DATE_NOT_VALID => "Date must be a string and must be formatted as yyyy-mm-dd", 
    self::ERROR_NOT_FUTURE_DATE => "The provided date must be in the future", 
); 

iあなたが渡したキーは、テンプレートリスト内のメッセージを見つけるために使用されます。これらのメッセージは返されます。あなたはこのようなキーを使用してエラー投げるときに:

$this->error(self::ERROR_DATE_NOT_VALID, $value); 

を返されるメッセージは次のようになります。もっと

"Date must be a string and must be formatted as yyyy-mm-dd" 

読む習慣を書くことにあなたが言っている何here in the official ZF2 docs

+0

をバリデータであります完全に正しい。しかし、検証は 'InputFilter :: IsValid()'メソッドで行われるので、どのバリデーターが 'this-> error()'をセットするかは正確にはわかりません - これは(私が知っている限り)バリデータなし、またはバリデータ内の2つの値を比較する方法。だから私はどのバリデータに失敗するかを設定する方法が不明です。 –

+0

@JohnCrest [ZF2 'Callback'バリデーター](http://framework.zend.com/manual/current/en/modules/zend.validator.callback.html)を使用して、従属フィールドを検証(比較することもできます。さらにここで[この質問stackoverflow](http://stackoverflow.com/q/17529906/1697459)を読む) – Wilt

関連する問題