【问题标题】:Zf2 multicheckbox at least one element is always requiredZf2 multicheckbox 至少需要一个元素
【发布时间】:2013-11-16 12:34:19
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我找到了一种看似更简单的方法来解决这个问题,方法是在实例化表单后在控制器内将输入过滤器“必需”设置为 false。

    <?php 
        $form = new CampaignForm($multiCheckboxOptions); // Setting up checkbox in form class
        $form->getInputFilter()->get('my_multi_checkbox')->setRequired(false);
    ?>
    

    【讨论】:

      【解决方案2】:

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

      public function getInputFilterSpecification() {
          return array(
          [...]
              'the-multi-checkbox-field' => array(
                  'required' => false,
              ),
          [...]
          );
      }
      

      【讨论】:

      • 好的,我重写了这个函数。验证通过,但值不会从数据库中删除。我将教义 2 ObjectMulticheckbox 用于多对多关系(从 zf2 multicheckbox 扩展而来)。当某些值从所有工作正常传递并将值保存到数据库时。
      • @user2623505 我不完全确定您在问什么,但它似乎与您最初的表单验证问题无关。
      【解决方案3】:

      好的,我做了一些小技巧来解决这个问题。 所以我在动作控制器中添加了这段代码:

      $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 方法,用于不需要的字段。

      【讨论】:

        猜你喜欢
        • 2012-09-26
        • 2011-07-21
        • 1970-01-01
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        • 2016-06-04
        相关资源
        最近更新 更多