ZendFrameworkにデフォルトのチェックボックス検証がないための多くの回避策を読みました。
私は最近ZF2を使い始めましたが、ドキュメントが少し不足しています。
Zend Form and Validationメカニズムを使用して、チェックボックスがオンになっていることを確認する方法を誰かに教えてもらえますか?フォームの配列構成を使用しています(ZF Webサイトのサンプルアプリにあるデフォルトの設定を使用しています)。
ZendFrameworkにデフォルトのチェックボックス検証がないための多くの回避策を読みました。
私は最近ZF2を使い始めましたが、ドキュメントが少し不足しています。
Zend Form and Validationメカニズムを使用して、チェックボックスがオンになっていることを確認する方法を誰かに教えてもらえますか?フォームの配列構成を使用しています(ZF Webサイトのサンプルアプリにあるデフォルトの設定を使用しています)。
これを試して
フォーム要素:
$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.',
),
),
),
),
)));
次のように値を「いいえ」に設定する代わりに、オプションから非表示のフォームフィールド(純粋な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
),
));
これは質問とは直接関係ありませんが、ユーザーの応答をデータベースに保存する場合の zf2 チェックボックスのヒントを次に示します...
'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 では) を確認する必要があります。これが誰かに役立つことを願っています!
私は同じ問題を抱えていて、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