0

我正在使用 cakephp 2.2.1 并尝试使用 cakedc 用户插件,当我尝试创建用户时出现以下错误,任何人都可以提供一些提示或建议来解决此错误 - 我已经使用迁移插件加载了所有表。提前致谢 :)。

2013-04-07 06:31:33 Error: [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'register' at line 1
#0 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(459): PDOStatement->execute(Array)
#1 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(425): DboSource->_execute('register', Array)
#2 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(669): DboSource->execute('register', Array, Array)
#3 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(611): DboSource->fetchAll('register', Array, Array)
#4 C:\wamp\www\toppin\lib\Cake\Model\Model.php(788): DboSource->query('register', Array, Object(User))
#5 C:\wamp\www\toppin\app\Plugin\Users\Controller\UsersController.php(331): Model->__call('register', Array)
#6 C:\wamp\www\toppin\app\Plugin\Users\Controller\UsersController.php(331): User->register(Array)
#7 [internal function]: UsersController->add()
#8 C:\wamp\www\toppin\lib\Cake\Controller\Controller.php(485): ReflectionMethod->invokeArgs(Object(UsersController), Array)
#9 C:\wamp\www\toppin\lib\Cake\Routing\Dispatcher.php(186): Controller->invokeAction(Object(CakeRequest))
#10 C:\wamp\www\toppin\lib\Cake\Routing\Dispatcher.php(161): Dispatcher->_invoke(Object(UsersController), Object(CakeRequest), Object(CakeResponse))
#11 C:\wamp\www\toppin\app\webroot\index.php(92): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#12 {main}

添加功能:

public function add() {
        if ($this->Auth->user()) {
            $this->Session->setFlash(__d('users', 'You are already registered and logged in!'));
            $this->redirect('/');
        }

        if (!empty($this->request->data)) {
            $user = $this->User->register($this->request->data);
            if ($user !== false) {
                $this->_sendVerificationEmail($this->User->data);
                $this->Session->setFlash(__d('users', 'Your account has been created. You should receive an e-mail shortly to authenticate your account. Once validated you will be able to login.'));
                $this->redirect(array('action' => 'login'));
            } else {
                unset($this->request->data[$this->modelClass]['password']);
                unset($this->request->data[$this->modelClass]['temppassword']);
                $this->Session->setFlash(__d('users', 'Your account could not be created. Please, try again.'), 'default', array('class' => 'message warning'));
            }
        }
    }
4

2 回答 2

2

由于某种原因,UserCakePHP 没有使用您的模型或该register()方法不存在。CakePHP 会将不存在的方法作为 SQL 语句执行。如果一个模型没有被使用,CakePHP 会自动创建一个模型,基于你的AppModel

要发现是否User找不到模型,试试这个;

public function add()
{
    debug(get_class($this->User));

    // ....
}

这应该输出User. 如果它输出AppModel或者ModelCakePHP 正在使用通用模型,这表明它找不到您的用户模型。

  • 清除您的app/tmp/cache/modelsapp/tmp/cache/persistent目录,或者如果您使用 APC,请清除用户缓存。
  • 如果您在控制器中使用多个模型,请检查User模型是否在您的$uses数组中
  • 检查您的 User 模型是否在此文件中:app/Model/User.php并且类名是User(单数,而不是复数

另一方面,如果您的模型正确加载(调试示例显示User,而不是AppModel),则检查您是否确实有register()方法,如果没有,则应创建 if。

希望这可以帮助。

[更新]

刚刚意识到您正在使用用户插件,并且可能正在加载错误的用户模型。使用插件时,您还需要使用插件User中的模型,而不是您自己的模型。User

如果你确实有你自己的用户模型,你应该将它重命名为User(例如AppUser)以外的名称,以防止 CakePHP 加载错误的模型。按照插件文档中关于如何在此处扩展插件“组件”的说明:扩展模型

但是,如果您想User从插件扩展模型,您还需要扩展UsersController插件,请参阅扩展控制器

如果您不需要扩展插件模型和控制器,最好从您的应用程序中删除它们(例如app/Model/User.phpapp/Controller/UsersController.php

我保留了上面的原始建议,因为它们在其他情况下仍然可能会有所帮助

于 2013-04-07T09:34:52.837 回答
0

你应该检查$this->request->data用户表中的内容,也许某些值是不合法的

于 2013-04-07T07:26:30.460 回答