我无法使用multiheckbox验证zf2表单,因为始终至少需要一个复选框。 我发现了很多关于这个问题的引用(例如这里 - https://github.com/zendframework/zf2/issues/4845),但我没有找到解决方案。 有人知道如何解决这个问题吗?
更新:我使用从zf2 multichechbox扩展的学说2 objectmulticheckbox。正如下面评论的getInputFilterSpecification方法的覆盖,将解决表单验证的问题,但值仍将保留在数据库中(由objectmulticheckbox填充的值)。
答案 0 :(得分:2)
在实例化表单之后,通过在控制器中将输入过滤器'required'设置为false,我发现了一种似乎更容易解决此问题的方法。
<?php
$form = new CampaignForm($multiCheckboxOptions); // Setting up checkbox in form class
$form->getInputFilter()->get('my_multi_checkbox')->setRequired(false);
?>
答案 1 :(得分:1)
您可以覆盖表单上的getInputFilterSpecification
函数,将字段设置为不需要。例如:
public function getInputFilterSpecification() {
return array(
[...]
'the-multi-checkbox-field' => array(
'required' => false,
),
[...]
);
}
答案 2 :(得分:1)
好的,我做了一点点黑客来解决这个问题。 所以我在动作控制器中添加了这段代码:
$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方法,用于不应该要求的字段。