5

ZendFrameworkにデフォルトのチェックボックス検証がないための多くの回避策を読みました。

私は最近ZF2を使い始めましたが、ドキュメントが少し不足しています。

Zend Form and Validationメカニズムを使用して、チェックボックスがオンになっていることを確認する方法を誰かに教えてもらえますか?フォームの配列構成を使用しています(ZF Webサイトのサンプルアプリにあるデフォルトの設定を使用しています)。

4

5 に答える 5

21

これを試して

フォーム要素:

$this->add(array(
            'type' => 'Zend\Form\Element\Checkbox',
            'name' => 'agreeterms',
            'options' => array(
                'label' => 'I agree to all terms and conditions',
                'use_hidden_element' => true,
                'checked_value' => 1,
                'unchecked_value' => 'no'
            ),
        ));

フィルターで、数字の検証を追加します

use Zend\Validator\Digits; // at top

$inputFilter->add($factory->createInput(array(
                        'name' => 'agreeterms',
                        'validators' => array(
                            array(
                                'name' => 'Digits',
                                'break_chain_on_failure' => true,
                                'options' => array(
                                    'messages' => array(
                                        Digits::NOT_DIGITS => 'You must agree to the terms of use.',
                                    ),
                                ),
                            ),
                        ),
                    )));
于 2013-02-14T11:58:32.747 に答える
9

次のように値を「いいえ」に設定する代わりに、オプションから非表示のフォームフィールド(純粋なHTMLの観点からは少し奇妙だと思います)を削除することもできます。

$this->add(array(
        'type' => 'Zend\Form\Element\Checkbox',
        'name' => 'agreeterms',
        'options' => array(
            'label' => 'I agree to all terms and conditions',
            'use_hidden_element' => false
        ),
    ));
于 2013-05-09T02:21:34.867 に答える
3

これは質問とは直接関係ありませんが、ユーザーの応答をデータベースに保存する場合の zf2 チェックボックスのヒントを次に示します...

  1. '1' と '0' の文字列を使用してください。他のものを機能させようとする必要はありません。さらに、これらの値をビット/ブール列の SQL 値として直接使用できます。
  2. 非表示の要素を使用してくださいそうしないと、フォームに値が投稿されず、誰もそれを望んでいません。
  3. 値をブール値にフィルタリングしようとしないでください。何らかの理由で、ブール値が false になると、フォームは'required' => false;

フォームでの要素の作成例:

$this->add([
    'name' => 'cellPhoneHasWhatsApp',
    'type' => 'Checkbox',
    'options' => [
        'label' => 'Cell phone has WhatsApp?',
        'checked_value' => '1',
        'unchecked_value' => '0',
        'use_hidden_element' => true,
    ],
]);

入力フィルタ仕様の例:

[
    'cellPhoneHasWhatsApp' => [
         'required' => false,
     ],
]

ブートストラップを使用して他のフォーム フィールドを非表示にする場合の例を次に示します。

$this->add([
    'name' => 'automaticTitle',
    'type' => 'Checkbox',
    'options' => [
        'label' => 'Automatically generate title',
        'checked_value' => '1',
        'unchecked_value' => '0',
        'use_hidden_element' => true,
    ],
    'attributes' => [
        'data-toggle'     => 'collapse',
        'data-target'     => '#titleGroup',
        'aria-expanded'   => 'false',
        'aria-controls'   => 'titleGroup'
    ],
]);

私は ZF2 のファンですが、結局のところ、ZF2 で何が機能し、何が機能しないか (特に Forms では) を確認する必要があります。これが誰かに役立つことを願っています!

于 2016-10-05T23:41:12.180 に答える
3

私は同じ問題を抱えていて、Optimus Crew の提案に似たようなことをしましたが、Identical Validator を使用しました。

チェックボックスのオプションを設定せずchecked_value、デフォルトのままにしておくと、データが POST されたときに「1」が渡されます。必要に応じて設定できtokenますが、バリデーターのオプションで同じ値をチェックしていることを確認してください。

$this->filter->add(array(
        'name' => 'agreeterms',
        'validators' => array(
            array(
                'name' => 'Identical',
                'options' => array(
                    'token' => '1',
                    'messages' => array(
                        Identical::NOT_SAME => 'You must agree to the terms of use.',
                    ),
                ),
            ),
        ),
    ));

'use_hidden_element' => falseフォームのチェックボックスのオプションを使用する場合、これは機能しません。これを行うと、デフォルトの NotEmpty メッセージが表示されることになりますValue is required and can't be empty

于 2013-06-19T14:44:56.003 に答える