Zf2 multicheckbox始终需要至少一个元素

时间:2013-11-16 12:34:20

标签: zend-framework doctrine-orm zend-framework2 zend-form

我无法使用multiheckbox验证zf2表单,因为始终至少需要一个复选框。 我发现了很多关于这个问题的引用(例如这里 - https://github.com/zendframework/zf2/issues/4845),但我没有找到解决方案。 有人知道如何解决这个问题吗?

更新:我使用从zf2 multichechbox扩展的学说2 objectmulticheckbox。正如下面评论的getInputFilterSpecification方法的覆盖,将解决表单验证的问题,但值仍将保留在数据库中(由objectmulticheckbox填充的值)。

3 个答案:

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