ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 如何使用相同的字段验证以zend形式添加和编辑操作?

2019-07-29 11:28:39  阅读:208  来源: 互联网

标签:php zend-framework zend-form zend-validate


我是zend框架的新手.我正在开发一个简单的用户注册应用程序在zend.我在我的应用程序中添加和编辑功能.我可以使用我的应用程序完美地添加新用户.但是当我尝试编辑除密码以外的用户信息时,用于密码和密码确认字段的验证器会出错.仅当我想编辑除密码以外的用户信息时,我才需要删除/禁用密码和密码确认字段的验证器.

我的表格:

$password = new Zend_Form_Element_Password('password');
        $password->setRequired(true)
        ->addFilter('StringTrim')
        ->addFilter('StripTags')
        ->addValidator('NotEmpty', false, array('messages'=>'password cannot be empty'))
        ->addValidator('StringLength', false, array(2, 20, 'messages'=>'password must be 2-20 character'))
        ->setLabel('Password:');
        $this->addElement($password);

        $confirmPassword = new Zend_Form_Element_Password('confirmPassword');
        $confirmPassword->setRequired(true)
        ->addFilter('StringTrim')
        ->addFilter('StripTags')
        ->addValidator('NotEmpty', false, array('messages'=>'password do not match'))
        ->addValidator(new Application_Validate_PasswordConfirmation())
        ->setLabel('Retype password');

我的验证员类:

class Application_Validate_PasswordConfirmation extends Zend_Validate_Abstract
{
     const NOT_MATCH = 'notMatch';

     protected $_messageTemplates = array(
     self::NOT_MATCH => 'Password confirmation does not match'
     );

     public function isValid($value, $context = null)
     {
         $value = (string) $value;
         $this->_setValue($value);

         if (is_array($context)) {
            if (isset($context['password']) && ($value == $context['password']))
            {
                return true;
            }
         } elseif (is_string($context) && ($value == $context)) {
                return true;
           }

         $this->_error(self::NOT_MATCH);
         return false;
     }
}

解决方法:

    $modelUsers = new Model_Users();
    $userId = $this->_getParam('userId');

    if ($userId) {
        $populateData = array();

        $user = $modelUsers->fetch($userId);

        if ($user instanceof Model_User) {
            $populateData = $user->toArray();
        }
        $form = $this->_getAddForm($user->email, $user->username, $user->phone);
        $password = $this->getRequest()->getPost('password');
        if (trim($password) == '') {
            $form->getElement('password')
            ->setRequired(false)
            ->clearValidators();

            $form->getElement('confirmPassword')
            ->setRequired(false)
            ->clearValidators();
        }

    }
   else {
        $form = $this->_getAddForm($mail=null, $username=null, $phone=null);
   }
    $request = $this->getRequest();

    if ($request->isPost()) {

        $post = $request->getPost();
        if ($form->isValid($post)) {
            $values = $form->getValidValues($post);

这就是我在@ drew010的帮助下绝对解决这个问题的方法

标签:php,zend-framework,zend-form,zend-validate
来源: https://codeday.me/bug/20190729/1571172.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有