2

我想绕过 Zend Framework 2 中选择元素的烦人验证。我的要求是我有两个选择下拉框,我将值从左选择框传递到右选择框,最后当我单击提交按钮时,我从右选择框中发布值。

所以基本上左选择框是用来向用户显示值的,我的问题是在左选择框中没有选择值,它会抛出这个错误:

["selectAll"] => array(1) {
      ["isEmpty"] => string(36) "Value is required and can't be empty"
    }

我看过一些来自 Stackoverflow 的旧帖子,这在 Zend Framework 1 中是可能的,就像可以禁用特定选择元素的验证一样

例子:-

$selectAllElement->setRequired(false);

或者

$selectAllElement->removeDecorator('Errors');

这些方法在 Zend Framework 2 中是如何不可用的。如果有人有解决方案来禁用特定选择元素的验证,请分享您的知识,这对进入 Zend Framework 2 的人会很有帮助。

编辑:

在我的表格中-

    $select = new Element\Select('selectAllElement');
    $select->setAttribute('title', 'Select a Value')
            ->setAttribute('id', 'id');

    $options = array(
        array(
           //Fetching the values from database
            ),
    );

   $select->setAttribute('multiple', 'multiple')
        ->setAttribute('required', false)
        ->setValueOptions($options);

   $this->add($select);

根据 Sam 的请求,我提供了如何将 select 元素添加到表单并设置属性的代码。

注意:我没有使用任何FIELDSETS

4

3 回答 3

6

为了澄清这一点,在任何 Zend\Form\Element 上使用setRequired()-Method 只声明是否required="(bool)"应该呈现 HTML 属性。

如果要从验证中排除字段/元素,则需要在 InputFilters 设置中定义它'required' => false

于 2012-10-19T13:25:59.520 回答
1

有时对我来说,setRequired(false) 在使用视图中不存在的选择多个或复选框时不起作用,因此,我只是覆盖 isValid 方法并删除验证器,如上面的代码:

public function isValid() {
    $this->getInputFilter()->remove('alterarsenha');
    $this->getInputFilter()->remove('usuario_perfis');

    return parent::isValid();
}
于 2014-10-23T12:17:42.920 回答
0

我知道这个话题很可能已经过时了,但也许有人认为这很有用。

在我使用的 zf2 版本中,Zend\Form\Element\Select 类中有一个错误,该类在此方法选项中提供 InputProviderInterface,尤其是方法 getInputSpecification()

$spec = array(
    'name' => $this->getName(),
    'required' => true,
);

因此,如果您重新定义方法 getInputSpecification 它应该可以工作。

于 2016-02-07T15:37:23.373 回答