Cakephp登录页面询问表用户,但我只有一个用户表

时间:2016-01-04 18:13:30

标签: php mysql cakephp login cakephp-3.0

我正在关注Cakephp 3.0

的蛋糕教程

我正处于我想要登录页面的部分。我有一个名为medical_wear的数据库和一个表user

当我在登录页面输入我的电子邮件和密码时,我收到以下错误:

  

SQLSTATE [42S02]:找不到基表或视图:1146表   'medical_wear.users'不存在请尝试更正问题   下表别名:Users

我不明白我没有Users表,也没有在代码中使用Users表。

我搜索了许多主题和文档,但我什么也没找到。

我在src / Controller / AppController.php

中有这个
public function initialize() {
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ] 
            ]
        ],
        'loginAction' => [
            'controller' => 'User',
            'action' => 'login'
        ]
    ]);
    // Autorise l'action display pour que notre controller de pages // continue de fonctionner.
    $this->Auth->allow(['display']);
}

在src / Controller / UsersController.php中

public function login() {
    if ($this->request->is('post')) { 
        $user = $this->Auth->identify(); 
        if ($user) {
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl()); 
        }
        $this->Flash->error('Votre username ou mot de passe est incorrect.');
    }
}

在src / Template / Users / login.ctp

<h1>Connexion</h1>
<?= $this->Form->create() ?>
<?= $this->Form->input('email') ?> 
<?= $this->Form->input('password') ?> 
<?= $this->Form->button('Login') ?> 
<?= $this->Form->end() ?>

2 个答案:

答案 0 :(得分:1)

cakephp遵循命名约定

数据库表和字段命名约定

  1. 表名必须为小写&amp;复数。如果有多个 表名中的单词然后单词应该用下划线分隔。

    Example : users, consultant_services, etc.
    
  2. 字段名称也应为小写,如果不止一个字 然后用下划线分隔。

    Example : id, consultant_service_name
    
  3. ForeignKey名称应为singular和tablename_id

    Example : users_id or consultant_services_id
    
  4. 模型命名惯例

    1. 模型文件名是上层驼峰案例,应该是多个单词 用下划线分隔。

      Example : User.php or Consultant_service.php
      
    2. 模型类名称是单数,通常这应该是数据库 表格名称,但以单数格式。

      Example : User or ConsultantService
      
    3. 所以你的代码应该是

      class UserTable extends Table
      {
          public function initialize(array $config)
          {
              parent::initialize($config);
              $this->table('user');
          }
      }
      

      了解更多信息conventions

答案 1 :(得分:0)

CakePHP's naming conventions要求表名为复数。因此,您的users数据库中应该有一个medical_wear表,应用中应该有一个UsersTable类。

最好避免违反Cake的命名约定,因为它会产生比一般值更多的问题,但是如果你必须有一个单一的user表你需要在模型中定义它。

class UserTable extends Table
{
    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->table('user');
    }
}

如果您需要开发使用无法修改的现有数据库的应用程序,那么必须脱离约定的唯一真正原因是。如果你从头开始坚持conventions described in the docs,因为它会极大地简化事情。