2009-08-24 2 views
2

私はZend Framework 1.62を使用しています(ZF1.62をサポートするのに十分なhgihのPHPバージョンを持っていないRed Hatインスタンスに完成品を配備しています)。 )。Zend_Form_Element_Selectを使用している場合、InArrayバリデータのカスタムエラーメッセージにアクセスします。

Zend Formを使用してフォームを作成する際に、select要素を追加し、複数のオプションを追加します。 Zend Formをオブジェクト内の検証レイヤーとして使用し、オブジェクト値を渡し、isValidメソッドを使用してすべての値が通常のパラメーター内にあるかどうかを判断します。

Zend_Form_Element_Selectは、私が追加したマルチ選択オプションの1つ以外の値が入力された場合、正しく表示され、正しく表示されます。

問題は、ある時点でフォームを表示したいときに、ZFによって自動的に追加された事前登録済みの 'InArray'バリデータによって作成されたエラーメッセージを編集できなくなります。私はこの動作を無効にすることができます知っているが、それは離れてエラーメッセージから大きく動作します。私は以下を試しました:

$this->getElement('country')->getValidator('InArray')->setMessage('The country is not in the approved lists of countries'); 

// Doesn't work at all. 

$this->getElement('country')->setErrorMessage('The country is not in the approved lists of countries'); 

//エラーメッセージの細かい制御を可能にしません。

誰もが考えている?

ベン

答えて

1

I以下の私の例のように通常設定バリ:

$this->addElement('text', 'employee_email', array(
      'filters' => array('StringTrim'), 
      'validators' => array(    
       array('Db_NoRecordExists', false, array(
        'employees', 
        'employee_email', 
        'messages' => array(Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND => 'A user with email address %value% already exists') 
       )) 
      ), 
      'label'  => 'Email address', 
      'required' => true, 
      )); 

要素オプションでのバリデータの配列は、バリデータ名(文字列)または配列を取ることができます。

配列が渡されるとき、最初の値は名前で、3番目はバリデータのオプション配列です。このオプションの配列で、要素のカスタムメッセージを含む主要メッセージを指定できます。

+0

しかし、このインスタンスでは、バリデータはバックグラウンドで設定されています。マニュアルから: デフォルトでは、この要素は登録されたオプションの配列キーに対して検証するInArrayバリデーターを登録します。この動作を無効にするには、setRegisterInArrayValidator(false)を呼び出すか、registerInArrayValidator構成キーにfalse値を渡します。 私の質問は、この特定のバリデータエラーメッセージにアクセスすることに関連しています。 あなたのお返事ありがとうございます、それ以上の洞察? Ben –

0
$el = $this->addElement($name, $label, $require, 'select'); 

$validator = new Zend_Validate_InArray(array_keys(AZend_Geo::getStatesList())); 
$validator->setMessage('Invalid US State.'); 

$el 
->setMultiOptions(AZend_Geo::getStatesList()) 
->setRegisterInArrayValidator(false) 

->addValidator($validator) 

->addFilter(new Zend_Filter_StringToUpper()) 
->addFilter(new T3LeadBody_Filter_SetNull()) 

->setDescription('US State. 2 char.'); 
1

あなたがZend_Form_Element_Select(またはマルチサブクラスのいずれか)を使用している場合は1つの存在がない場合、検証にInArrayバリバリデータは自動的に追加されます。

あなたはそうとバリデータを設定することができます。

$options = array(...); 
$this->addElement('select', 'agree', array(
    'validators' => array(
     array('InArray', true, array(
      'messages' => array(
       Zend_Validate_InArray::NOT_IN_ARRAY => 'Custom message here', 
      ), 
      'haystack' => array_keys($options), 
     )), 
    'multiOptions' => $options, 
)); 

、その後、あなたのバリデータが代わりに自動的に取り付けられた1つの使用されます。

+0

必要に応じて自動的に付加されたInArrayバリデータがtrueに設定されています。したがって、この例は、InArrayバリデーターが自動的には付加されないので機能します。 – bsrykt

関連する問題