3

私は Zend Framework 1.62 を使用しています (ZF1.62 をサポートするのに十分な PHP バージョンがない Red Hat インスタンスに完成品をデプロイするため)。

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

Zend_Form_Element_Select は期待どおりに機能し、追加した複数選択オプション以外の値が入力された場合は無効と表示されます。

問題は、ある時点でフォームを表示したいときに発生します.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');

// アプリケーション内の別の場所で競合が発生し、エラー メッセージをきめ細かく制御できません。

誰にもアイデアはありますか?

ベン

4

3 に答える 3

1

私は通常、以下の例に従ってバリデーターを設定します。

$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番目の値はバリデーターのオプションの配列です。このオプションの配列で、要素のカスタムメッセージを含むキーメッセージを指定できます。

于 2009-08-24T12:10:51.900 に答える
1
$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.');
于 2010-01-13T17:52:09.737 に答える
1

Zend_Form_Element_Select (または Multi サブクラスのいずれか) を使用している場合、検証時に 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,
));

その後、自動的にアタッチされたバリデーターの代わりにバリデーターが使用されます。

于 2010-10-14T02:59:54.763 に答える