1

我是 CakePhp 的新手,我正在使用 CakePhp 2.x。我可能会以错误的方式解决以下问题。而且我只知道我忽略了一些非常简单的事情,但是......

我正在根据“在 5 到 15 个字符之间”验证登录详细信息,它们正在按预期重新调整错误。

[The MODEL]

public $validate = array(
   'username' => array(            
        'between' => array(
            'rule'    => array('between', 5, 15),
            'message' => 'Between 5 to 15 characters'
        )
    ),
    'password' => array(
        'rule'    => array('minLength', '8'),
        'message' => 'Minimum 8 characters long'
    )

);



[The CONTROLLER]

public function login() {

            if ($this->request->data) {

                $this->User->set($this->request->data);

                if ($this->User->validates() && $this->Auth->login()) {

                    if ($user = $this->Auth->user()) {                       

                         $this->render($this->Auth->redirect());

                    }else{
                        //??
                    }
                }else{
                        $this->User->create();

                    pr($this->User->invalidFields());

                        $errors = $this->User->validationErrors;

                        $data = compact('errors');

                        $this->set('errors', $data);
                        $this->set('_serialize', array('errors'));

                        $this->Session->setFlash('Your username/password combination was incorrect');                                    
                }
            }


    }

所以,问题是,如果字段遵循上面模型中的规则,即使登录详细信息(用户)不存在,也不会返回错误(不好)。为此添加其他验证是否正确,添加另一条规则以检查该用户是否实际存在?如果有怎么办!?

或者,我是否将其用于控制​​器登录功能检查用户是否存在?我现在有点困惑。可能我看屏幕太久了。

谢谢。

4

2 回答 2

1

您可以为每个字段指定多个规则...

请点击此链接了解更多信息...

http://book.cakephp.org/2.0/en/models/data-validation.html#multiple-rules-per-field

下面给出了一个示例代码

<?php

[IN The MODEL]

//the following code checks if the username is notempty, is a valid email and is it already taken or not...
public $validate = array(

    'username' => array(

        'notempty' => array(
            'rule' => array('notempty'),
            'message' => 'Please enter a valid email.',
        ),

        'email' => array(
            'rule' => array('email'),
            'message' => 'Please enter a valid email.',
        ),

        'isUnique' => array(
            'rule' => 'isUnique',
            'message' => 'This username has already been taken.'
        )
    )
);
?>
于 2013-07-24T06:12:47.680 回答
1

为此添加其他验证是否正确,添加另一条规则以检查该用户是否实际存在?如果有怎么办!?

您可以根据需要添加任意数量的规则。在这种情况下,您需要规则“唯一”。阅读本书中关于数据验证的这一部分

或者,我是否将其用于控制​​器登录功能检查用户是否存在?

所有数据操作和验证都应该发生在 MVC 堆栈的模型层中。因此,将所有内容放入模型方法并将发布数据传递给它并在那里验证它。您可以将所有逻辑放入控制器中,但这在不遵循 MVC 模式方面是愚蠢的。模型可以在 shell 和控制器之间共享,例如,控制器不能。同样,您可以在 shell 中实例化一个控制器,但这样做会否定 MVC 模式的任何好处和想法。此外,一个模型在竞争上也很容易测试。是的,您应该对代码进行单元测试。例如,检查我们的用户插件是如何做到的。

于 2013-07-21T12:57:00.317 回答