在编辑模式zend中保留密码为空

时间:2013-04-08 12:57:37

标签: frameworks passwords zend-framework2 edit validation

是否可以设置以下选项:

当您必须添加用户时,您需要设置密码,但是当您去编辑用户时,则无需设置密码。

但是当您在编辑模式中将密码留空时。它不应该覆盖令人兴奋的密码。

我如何在Zend framework 2.0中解决这个问题?

编辑:

也许最好显示一些代码..我在密码字段上设置了以下验证器:

            $inputFilter->add($factory->createInput(array(
            'name' => 'password',
            'required' => true,
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array( array(
                    'name' => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min' => 4,
                        'max' => 30,
                    ),
                ), ),
        )));

        $inputFilter->add($factory->createInput(array(
            'name' => 'confirm_password',
            'required' => false,
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name' => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min' => 4,
                        'max' => 30,
                    ),
                ),
                array(
                    'name' => 'identical',
                    'options' => array('token' => 'password')
                ),
            ),
        )));

工作正常,但是当我在编辑模式中将其留空时。但它在我的添加模式中是必需的。如何在编辑模式下接受空密码字段,而不清除该用户的激活密码?

2 个答案:

答案 0 :(得分:0)

为什么不只是将密码需要bool传递给验证方法,将其与当前验证规则结合使用意味着它将在需要时运行验证。控制器还可以检测该页面的发布/获取值是否已设置并相应地更改该bool值。

它不是最好的方法,可能有一些花哨的Zend方式这样做,但手册不会覆盖它大声笑

实施例

public function validate($passRequired = false)
{
    if ($passRequired) {
        //now run the validation
    }
}

答案 1 :(得分:0)

您可以尝试以下代码:

if ($this->getRequest()->isPost()) {
  $form->setData($this->getRequest()->getPost());

  if ($form->get("password")->getValue() == ""){
    $form->getInputFilter()->remove('password');
    $form->getInputFilter()->remove('password_r');
  }  

  if ($form->isValid()) {
     // ...
  }
  // ...
}