CakePHP验证,Auth中的错误消息和禁用修改。

时间:2011-07-30 03:25:13

标签: php cakephp cakephp-1.3

我试图让这个功能按照理想的方式工作,但没有太多运气。 好消息是,它是否有效。我唯一想要正常工作的是我设法的字段验证错误消息,但即使用户名和密码正确也无法登录。我已经回滚了这个功能,希望有人能为我解释一下。

    function login() {
            $this->layout = 'login';
            $this->set('title_for_layout', 'Login');
            if (!empty($this->data) && $id = $this->Auth->user('id')) { 
                    $this->User->id = $id; 
                    $this->User->saveField('last_login', date('Y-m-d H:i:s')); 
                    $this->Session->setFlash(__('You have successfully logged in', true));
                    $this->redirect(array('action'=>'index')); 
            }    
    }

我在用户模型中设置的验证:

var $validate = array(
                'username' => array(
               ),
                'login' => 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' => array('notempty'),
                            'message' => 'Username cannot be empty',
                    ),
            ),
        'password' => array(
                        'notempty' => array(
                                'rule' => array('notempty'),
                                'message' => 'Password cannot be empty',
                        ),
                        'length' => array(
                                'rule' => array('between', 5, 15),
                                'message' => 'Passwords must be between 5 and 15 characters long with no spaces',
                                'on' => 'create',
                        )
        )
);

我将取消设置登录的某些验证规则,我现在只想让验证以正确的方式运行。

真的,我有三个问题......

  1. 为什么我的验证无法正常工作?

  2. 如何在观看中显示AuthComponent的消息?

  3. 如何暂时禁用表格中的modified字段进行更新?

  4. 非常感谢!

1 个答案:

答案 0 :(得分:1)

除了我在评论中发现的错误,我相当确定您的login验证设置不正确。

这是你拥有的:

'login' => 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' => array('notempty'),
                                'message' => 'Username cannot be empty',
                        ),
        ),

以下是我想要

想法
'username' => array(
    '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',
    ),
),

指向CakePHP BookCakePHP API的强制性链接。

<小时/> 在评论中回答OP的错误:

我现在看到你想要做什么。试试这个:

$id = $this->Auth->user('id');
if (!empty($this->data) && $id) { 
                $this->User->id = $id;

<小时/> 回答“如何从AuthComponent显示我的登录错误消息?”

要显示登录错误消息,您需要在布局或视图中为登录表单添加以下行。

echo $this->Session->flash('auth');

<小时/> 回答“如何暂时禁用CakePHP的modified行为?”:

嗯,简要介绍一下源代码和answer to this question on Cake's internal QA,您可以在保存数据之前添加类似的内容。

$this->data['User']['modified'] = false;

这告诉Cake不要更新修改后的字段。

有趣的是,从源代码可以看出,您可以轻松地将false替换为true,并且不会更新该字段。我不知道这是否确实如此。