4

次のように、フォームに Select 要素があります。

$this->add(array(
    'name' => 'cat_id',
    'type' => 'Zend\Form\Element\Select',
    'options' => array(
        'label' => 'Categoria',
        'empty_option' => '',
        'value_options' => array(
            '' => '',
        ),
    ),
));

私のvalue_optionsコントローラーにはデータベース情報がいっぱいです...(もっと良い方法はありますか?)

そして、私は彼のために、次のように InputFilter を持っています:

$this->add(array(
    'name' => 'cat_id',
    'required' => true,
    'validators' => array(
        array(
            'name' => 'NotEmpty',
            'break_chain_on_failure' => true,
            'options' => array(
                'messages' => array('isEmpty' => 'O campo "Categoria" é obrigatório'),
            ),
        ),
    ),
));

メッセージを変更したいことに注意してisEmptyください...そしてそれが問題です!

フォームを送信すると、英語で同じメッセージが表示されます。

cat_id:
    isEmpty : Value is required and can't be empty

だから私の質問は:なぜ私はまだこのメッセージを持っているのですか?それはどこから来たのですか?どうすれば変更できますか?

Ps .: Text 要素を使用すると、うまく機能します。Select 要素でのみ、この問題が発生します。

追加の質問:

InArray Validator を使用する場合は、次のようにします。

array(
    'name'    => 'InArray',
    'options' => array(
        'haystack' => array( ... ),
        'messages' => array(
            'notInArray' => 'Valor não encontrado no banco de dados' 
        ),
    ),
),

フィールドを常に埋める必要がありhaystackますか?バリデーターにフォームを使用するように言う方法はありませんvalue_optionsか?

ちんちん!

編集

よくわかりませんが、誰もそれを確認していませんが、ZF2 は、フォーム要素に を設定するとデフォルトの検証を行うと思いますtype

例えば、

$this->add(array(
    'name' => 'cat_id',
    'type' => 'Zend\Form\Element\Select',
    'options' => array(
        'empty_option' => '',
        'value_options' => array(
            // ...
        ),
    ),
    'attributes' => array(
        // ...
    ),
));

この場合、ZF2 は Select 要素に対していくつかのデフォルトの検証を作成しようとします。

では、この検証でメッセージをオーバーライドするにはどうすればよいでしょうか?

4

3 に答える 3

3

この問題を解決する方法があります。デフォルトの検証メッセージを削除する必要があります。フォームのコンストラクターに行を追加するだけです。

$this->setUseInputFilterDefaults(false);

于 2013-03-18T19:27:29.127 に答える
-1
    $inputFilter = new InputFilter();

    $factory = new InputFactory();


    $inputFilter->add($factory->createInput(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
              'name' =>'NotEmpty', 
                'options' => array(
                    'messages' => array(
                        \Zend\Validator\NotEmpty::IS_EMPTY => 'User name can not be empty.' 
                    ),
                ),
            ),
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                    'min' => 4,
                    'max' => 20,
                    'messages' => array(
                        'stringLengthTooShort' => 'Please enter User Name between 4 to 20 character!', 
                        'stringLengthTooLong' => 'Please enter User Name between 4 to 20 character!' 
                    ),
                ),
            ),

        ),
    )));
于 2012-11-06T17:33:26.983 に答える