我已经阅读了许多 Zend Framework 缺少默认复选框验证的解决方法。
我最近开始使用 ZF2 并且文档有点缺乏。
有人可以演示如何使用 Zend 表单和验证机制验证复选框以确保它被勾选吗?我正在为我的表单使用数组配置(使用 ZF 网站上的示例应用程序中的默认设置)。
我已经阅读了许多 Zend Framework 缺少默认复选框验证的解决方法。
我最近开始使用 ZF2 并且文档有点缺乏。
有人可以演示如何使用 Zend 表单和验证机制验证复选框以确保它被勾选吗?我正在为我的表单使用数组配置(使用 ZF 网站上的示例应用程序中的默认设置)。
试试这个
表单元素:
$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
),
));
我遇到了同样的问题,做了一些类似于Optimus Crew 的建议,但使用了 Identical Validator。
如果您未设置checked_value
复选框的选项并将其保留为默认值,则在发布数据时应传入“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
这与问题没有直接关系,但如果您希望将用户的响应存储在数据库中,这里有一些 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 的粉丝,但归根结底,您只需要找出哪些适用于它,哪些不适用(尤其是 Forms)。希望这对某人有帮助!
非常老的问题,但认为它可能仍然被像我这样仍在使用 Zend Framework 2 的人使用/引用。(在我的情况下使用ZF 2.5.3 )
杰夫上面的回答帮助我在这里为我正在使用的东西获得正确的配置。在我的用例中,我需要复选框,但将其留空将被视为“假”值,这是允许的。他的回答帮助我接受了false
价值观,尤其是他的:
不要尝试将值过滤为布尔值。出于某种原因,当布尔值结果为假时
用例是启用/禁用某些实体,例如国家或语言,以便它们不会出现在getEnabled[...]()
存储库功能中。
表单元素
$this->add([
'name' => 'enabled',
'required' => true,
'type' => Checkbox::class,
'options' => [
'label' => _('Enabled'),
'label_attributes' => [
'class' => '',
],
'use_hidden_element' => true,
'checked_value' => 1,
'unchecked_value' => 0,
],
'attributes' => [
'id' => '',
'class' => '',
],
]);
输入过滤器
$this->add([
'name' => 'enabled',
'required' => true,
'validators' => [
[
'name' => InArray::class,
'options' => [
'haystack' => [true, false],
],
],
],
])