在CakePHP中,我可以在auth调用之前在模型中调用一个伪方法,但不能在auth之后调用

时间:2013-10-13 06:40:54

标签: cakephp

我收到错误

  

数据库错误错误:SQLSTATE [42000]:语法错误或访问   违规:1064您的SQL语法出错;

我的插件位于app文件夹外的common cake文件夹中,因此多个应用可以使用它。

CakeFolder /插件/为myplugin /控制器/ UsersController.php

class UsersController extends AppController {

    // This works
    public function dummySignin(){
        if ($this->request->is('post')) {
            $this->User->dummyMethod(); //called before auth
            if ($this->Auth->login()) {
                return $this->redirect($this->Auth->redirectUrl());
            }else{
                $this->Session->setFlash('Username or password is incorrect');
            }
        }
    }

    // This doesn't
    public function signin(){
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->User->dummyMethod(); //called after auth
                return $this->redirect($this->Auth->redirectUrl());
            }else{
                $this->Session->setFlash('Username or password is incorrect');
            }
        }
    }
}

CakeFolder /插件/为myplugin /型号/ user.php的

class User extends AppModel {

    public function dummyMethod(){
        return true;
    }

}

我没有在控制器中声明模型名称,因为它是自动加载的。此外,我已尝试在Auth组件声明中指定用户模型,但没有任何结果。这似乎是由于我的模型没有正确加载,但我无法弄清楚原因。

2 个答案:

答案 0 :(得分:1)

这是我原帖的引用

  

我已尝试在Auth组件声明中指定用户模型,但没有任何结果。

那是我错的地方。事实证明我的Auth设置有误。我的自定义模型在authenticate选项之外声明。这就是我所拥有的:

'userModel' => 'myPlugin.User',
'authenticate' => array(
    'Form' => array(
        'fields' => array('username' => 'email')
    )
),

正确用法是:

'authenticate' => array(
    'Form' => array(
        'userModel' => 'myPlugin.User',
        'fields' => array('username' => 'email')
    )
),

谢谢大家的答案。这是rubber duck debugging的案例。

答案 1 :(得分:0)

我认为这可能与Cake尝试在app / Models中使用Auth组件的用户模型这一事实有关,而且你的插件用户模型之间的混淆?在这里阅读:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html Auth默认使用的模型是User,所以也许你可以覆盖它以使用你的插件?不确定你是否必须明确说明考虑控制器也在你的插件中......