2009-06-18 8 views
2

私はZend_Validateを使ってフォーム入力を検証しています(Zend Frameworkのバージョンは1.8.2です)。デフォルトの検証エラーメッセージを上書きできないのはなぜですか?

$data = $_POST; 
$filters = array('*' => array('StringTrim')); 
$validators = array('driverName' => array('NotEmpty','messages' => 'This should override the default message but does not!')); 
$inputFilter = new Zend_Filter_Input($filters,$validators,$data); 
$messages = $inputFilter->getMessages(); 
debug($messages); //show me the variable contents 

出力debug($messages)から:動作しません説明hereとしてZend_Filter_Inputインタフェースを使用して、いくつかの理由については、どんなに私は何をすべきか

Array 
(
    [driverName] => Array 
     (
      [isEmpty] => You must give a non-empty value for field 'driverName' 
     ) 

) 

、私はそのメッセージをオーバーライドすることはできません。私は直接バリデータを使用する場合は、debug($messages)からすなわち:

$notEmpty = new Zend_Validate_NotEmpty();  
$notEmpty->setMessage('This WILL override the default validation error message'); 
if (!$notEmpty->isValid($_POST['driverName'])) { 
    $messages = $notEmpty->getMessages(); 
    debug($messages); 
} 

出力:

Array 
(
    [isEmpty] => Please enter your name 
) 

ボトムライン。バリデーターを取得することはできますが、Zend_Filter_Inputインターフェースメソッドのメリットがない場合は、自分で検証クラスを作成することもできます。

これはなぜ起こっているのか、どのように修正するのかという手掛かりはありますか?

バグでしょうか?

答えて

5

バリデーター配列のmessagesキーには、キーと値のペアの配列を渡す必要があります。キーは検証メッセージ定数で、値はカスタムエラーメッセージです。

$validators = array(

     'excerpt' => array(
      'allowEmpty' => true, 
      array('StringLength', 0, Ctrl::getOption('blog/excerpt/length')), 
      'messages' => array(Zend_Validate_StringLength::TOO_LONG => 'The post excerpt must not exceed '.Ctrl::getOption('blog/excerpt/length').' characters.') 
     ), 

    ); 

しかし、あなたの場合には、表示されるエラーメッセージがのZend_Filter_InputのallowEmptyメタコマンドから来ている:ここでは例です。これは実際には標準バリデータではありません。あなたがそうのようにそれを設定することができます。

$options = array(
    'notEmptyMessage' => "A non-empty value is required for field '%field%'" 
); 

$input = new Zend_Filter_Input($filters, $validators, $data, $options); 

// alternative method: 

$input = new Zend_Filter_Input($filters, $validators, $data); 
$input->setOptions($options); 

あなたはフィールドごとに異なっていない空のメッセージが必要な場合は、私がallowEmpty => trueを設定し、カスタムメッセージをNotEmptyバリデータを追加することをお勧めしたいです。あなたの参考のために

は、NotEmptyバリの正しいメッセージキーは、メッセージ引数は、配列ではなく、文字列を受け取りZend_Validate_NotEmpty::IS_EMPTY

+0

...それはZend FrameworkののJIRAでだ、@Jasonバグです - 詳細&正しい答えをいただき、ありがとうございます。 $ optionsパラメータはそれを打ちました。パーフェクト、もう一度感謝:) – karim79

1

です。これを試してみてください:

$validators = array('driverName' => 
        array('NotEmpty', 
          'messages' => array(
           0 => 'This should override the default message but does not!' 
          ) 
        ) 
      ); 
+0

@スティーブ - 私はすでにそれを試していた、マニュアルはあなたがそれが動作していると信じてもらえますが、答えはありがたいです:)# – karim79

+0

@カリン - それはあまりにも悪いですZF 1.0ではこのように動作し、メッセージオーバーライド配列のキーとして検証定数を受け入れました。私はZFがどのようにインデックスベースのショートカットを提供したのか好きでしたが、私は彼らが本当にすべてを明示的/慣例に基づいて作りたいと思うと思います。 –

0

それは