我正在关注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() ?>
答案 0 :(得分:1)
cakephp遵循命名约定
数据库表和字段命名约定
表名必须为小写&amp;复数。如果有多个 表名中的单词然后单词应该用下划线分隔。
Example : users, consultant_services, etc.
字段名称也应为小写,如果不止一个字 然后用下划线分隔。
Example : id, consultant_service_name
ForeignKey名称应为singular和tablename_id
Example : users_id or consultant_services_id
模型命名惯例
模型文件名是上层驼峰案例,应该是多个单词 用下划线分隔。
Example : User.php or Consultant_service.php
模型类名称是单数,通常这应该是数据库 表格名称,但以单数格式。
Example : User or ConsultantService
所以你的代码应该是
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,因为它会极大地简化事情。