1

我得到错误

数据库错误错误:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;

我的插件位于 app 文件夹之外的 common cake 文件夹中,以便多个应用程序可以使用它。

CakeFolder/plugins/myPlugin/Controller/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/plugins/myPlugin/Model/User.php

class User extends AppModel {

    public function dummyMethod(){
        return true;
    }

}

我没有在控制器中声明模型名称,因为它是自动加载的。另外,我尝试在 Auth 组件声明中指定用户模型,但没有任何结果。这似乎是由于我的模型没有正确加载,但我不知道为什么。

4

2 回答 2

1

这是我原帖的引述

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

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

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

虽然正确的用法是:

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

谢谢大家的回答。那是一个橡皮鸭调试的案例。

于 2013-10-23T05:33:36.400 回答
0

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

于 2013-10-16T19:44:56.593 回答