关于zend框架:Zf2 multicheckbox 至少需要一个元素

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 方法,用于不应该被要求的字段。


您可以覆盖表单上的 getInputFilterSpecification 函数以将该字段设置为不需要。例如:

1
2
3
4
5
6
7
8
9
public function getInputFilterSpecification() {
    return array(
    [...]
        'the-multi-checkbox-field' => array(
            'required' => false,
        ),
    [...]
    );
}