【问题标题】:Leaving password blank in edit-mode zend在编辑模式zend中将密码留空
【发布时间】:2013-03-30 13:39:00
【问题描述】:

是否可以设置以下选项:

需要添加用户时,需要设置密码,而去编辑用户时,则不需要设置密码。

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

如何在 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')
                ),
            ),
        )));

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

【问题讨论】:

    标签: frameworks passwords zend-framework2 edit validation


    【解决方案1】:

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

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

    例子

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

    【讨论】:

    • 我不认为这是我想要的。当它处于添加模式时,我必须将我的密码设置为 true。并且在编辑模式下为假.. 密码可以全部为空而不覆盖当前密码。
    【解决方案2】:

    你可以试试这个代码:

    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()) {
         // ...
      }
      // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多