删除验证器并在控制器中将required设置为false

Gok*_*nde 2 zend-framework zend-form

我有以下代码为密码创建一个字段.

// Element: password
$this->addElement('Password', 'password', array(
   'label' => 'Password',
   'description' => 'Passwords must be at least 6 characters long.',
   'required' => true,
   'allowEmpty' => false,
   validators' => array(
       array('NotEmpty', true),
       array('StringLength', false, array(6, 32)),
       )
  ));
$this->password->getDecorator('Description')->setOptions(array('placement' => 'APPEND'));
$this->password->getValidator('NotEmpty')->setMessage('Please enter a valid password.', 'isEmpty');
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我需要删除验证器,并根据某些条件使控制器"必需"为false.

例如:-

if($someCondition){
    //Set required to false and remove validator here somehow
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道这种情况的解决方案?

vas*_*ite 7

如果您已在控制器中实例化您的表单,如下所示: -

$loginForm = new Application_Form_LoginForm();
Run Code Online (Sandbox Code Playgroud)

然后你可以设置密码(或任何其他)元素的属性,如下所示: -

if($someCondition){
    $loginForm->Password->setRequired(false);
    $loginForm->Password->setValidators(array());
}
Run Code Online (Sandbox Code Playgroud)

或者,当Zend_Form_Element::setRequired()返回Zend_Form_Element的实例时,您可以这样做: -

if($someCondition){
    $loginForm->Password->setRequired(false)->setValidators(array());
}
Run Code Online (Sandbox Code Playgroud)