Zf2 multicheckbox at least one element is always required
我无法使用 multicheckbox 验证 zf2 表单,因为始终需要至少一个复选框。
我发现了很多关于这个问题的参考资料(例如这里 - https://github.com/zendframework/zf2/issues/4845),但我没有找到解决方案。
有人知道如何解决这个问题吗?
更新:我使用从 zf2 multichechbox 扩展而来的学说 2 objectmulticheckbox。正如下面评论的,覆盖 getInputFilterSpecification 方法,将解决表单验证问题,但值仍将保留在数据库中(由 objectmulticheckbox 填充的值)。
我发现了一种看似更简单的方法来解决这个问题,方法是在实例化表单后,在控制器内将输入过滤器"required"设置为 false。
1 2 3 4 | <?php $form = new CampaignForm($multiCheckboxOptions); // Setting up checkbox in form class $form->getInputFilter()->get('my_multi_checkbox')->setRequired(false); ?> |
好的,我做了一些小技巧来解决这个问题。
所以我在动作控制器中添加了这段代码:
1 2 3 4 5 6 7 8 9 10 11 12 | $form->bind($client); /** @var $request Request */ $request = $this->getRequest(); if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) { /** @var $client Client */ $client = $form->getData(); // hack because of - https://github.com/zendframework/zf2/issues/4694 if($request->getPost('reportSettings') === null){ $client->setReportSettings(null); // set null to remove all associations with this client } |
也正如第一个答案中所描述的那样,在表单中应该重写 getInputFilterSpecification 方法,用于不应该被要求的字段。
您可以覆盖表单上的
1 2 3 4 5 6 7 8 9 | public function getInputFilterSpecification() { return array( [...] 'the-multi-checkbox-field' => array( 'required' => false, ), [...] ); } |