Cakephp 即使表单中没有字段,也要验证用户名

Cakephp 即使表单中没有字段,也要验证用户名,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我遇到了一个奇怪的问题,在编辑视图中验证用户名(如标题所示),这使我无法保存表单。我在这个视图中没有用户名的输入,为什么要验证它(并且失败) 验证如下: var $validate = array( 'username' => array( 'empty' => array( 'rule' => 'notEmpty',

我遇到了一个奇怪的问题,在编辑视图中验证用户名(如标题所示),这使我无法保存表单。我在这个视图中没有用户名的输入,为什么要验证它(并且失败)

验证如下:

var $validate = array(
               'username' => array(
            'empty' => array(
                                'rule' => 'notEmpty',
                                'required' => true,
                                'allowEmpty' => false,
                                'message' => 'Username is required',
            ),
            'isUnique' => array(
                                'rule' => 'isUnique',
                                'message' => 'This username has already been taken'
            ),
            'pattern' => array(
                                'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
                                'message' => 'Must be 6 characters or longer with no spaces',
            ),
            'length' => array(
                                'rule' => array('maxLength', 15),
                                'message' => 'Please keep username under 15 characters',
            ),
            'notEmpty' => array(
                                'rule' => 'notEmpty',
                                'message' => 'Username cannot be empty',
            )
);
编辑功能如下:

   function edit($id = null) {
            $this->set('title_for_layout', 'Edit Profile');
            unset($this->User->validate['email']['email']);
            unset($this->User->validate['username']);
            if($this->Auth->user('id')==$id) {
                $this->set('user', $this->User->read(null, $id));
                } else {
                    $this->Session->setFlash(__('You are not authorised to edit other member profiles', true));
                    $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('Your profile has been saved', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Your profile could not be saved. Please, try again.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->User->read(null, $id);
        }
        $groups = $this->User->Group->find('list');
        $this->set(compact('groups'));
    }
我已取消设置
用户名
,该用户名只允许我保存表单,但这不是正确的方法。有人能解释一下吗


非常感谢

required=>true使“用户名”键成为必填字段,这意味着如果您只是尝试更新设置或没有用户名键的内容,它将无效


我自己没有这样做,但是尝试将
'on'=>'create'
添加到
empty
规则中,这样它只在创建记录时适用。

required=>true使“username”键成为必填字段,这意味着如果您只是尝试更新设置或没有username键的内容,它将无效


我自己没有做过,但尝试将
'on'=>'create'
添加到
empty
规则中,这样它只在创建记录时适用。

一针见血-我正要来写点东西,你确认了我的发现<代码>“on”=>“create”是缺少的全部内容。。谢谢我强烈建议不要使用required=>true。这个要求可以通过不同的方式来实现。有关详细信息,请参见@Mark的“关于“必需”和“允许空”的神话”一节,该博客帖子说,你应该按照我的建议,只在
on=>create
中使用“必需”…一针见血-我正要来写一些东西,你证实了我的发现<代码>“on”=>“create”是缺少的全部内容。。谢谢我强烈建议不要使用required=>true。这个需求可以通过不同的方式来实现。有关详细信息,请参见@Mark的“关于“必需”和“allowEmpty”的神话”一节,该博客文章说,您应该只使用带有
on=>的required,正如我建议的那样创建
。。。