1

是否可以设置以下选项:

需要添加用户的时候需要设置密码,但是去编辑用户的时候就不需要设置密码了。

但是当您在编辑模式下将密码留空时。它不应该覆盖现有的密码。

我如何在 Zend 框架 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')
                ),
            ),
        )));

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

4

2 回答 2

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()) {
     // ...
  }
  // ...
}
于 2014-11-21T12:56:56.607 回答
0

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

它不是最好的方法,可能有一些奇特的 Zend 方法可以做到这一点,但手册不会涵盖它,哈哈

例子

public function validate($passRequired = false)
{
    if ($passRequired) {
        //now run the validation
    }
}
于 2013-04-10T13:55:58.453 回答