Php 尽管我没有使用名为“users”的模型,为什么auth组件仍访问“users”表?

Php 尽管我没有使用名为“users”的模型,为什么auth组件仍访问“users”表?,php,database,authentication,cakephp,cakephp-4.x,Php,Database,Authentication,Cakephp,Cakephp 4.x,我使用的是CakePHP4,当我尝试登录一个用户时,它会告诉我没有名为Users的表。但是我在代码中没有使用“Users”,只使用了没有“s”的“User” 我找不到bug以及如何解决它。这是在与命名约定作斗争时很容易发生的事情,因为CakePHP框架遵循约定优先于配置的方法 数据库表名(以及相应的表类)的约定是使用复数,因此users而不是user,因此,只要CakePHP提供模型/表名作为默认值,它就会相应地使用复数名 默认情况下,auth组件的验证器(顺便说一句,您应该考虑改用)配置为使

我使用的是CakePHP4,当我尝试登录一个用户时,它会告诉我没有名为Users的表。但是我在代码中没有使用“Users”,只使用了没有“s”的“User”


我找不到bug以及如何解决它。

这是在与命名约定作斗争时很容易发生的事情,因为CakePHP框架遵循约定优先于配置的方法

数据库表名(以及相应的表类)的约定是使用复数,因此
users
而不是
user
,因此,只要CakePHP提供模型/表名作为默认值,它就会相应地使用复数名

默认情况下,auth组件的验证器(顺便说一句,您应该考虑改用)配置为使用
Users
model/table别名,复数形式。相关的选项是
userModel
,如果要使用不同的模型,则需要相应地更改该选项。还有其他使用复数的选项,比如定义URL数组的选项,它们使用
用户
来定位
用户控制器
(控制器名称按惯例也是复数)

模型层也有实体,实体的惯例是使用单数名称,因此
User
。这是不为表使用单数名称的另一个原因,即使可以通过配置,也很容易造成与实体类名的混淆

我强烈建议您遵循约定,使用烘焙控制台创建模型、控制器等,尤其是初学者。一旦你熟悉了CakePHP的来龙去脉,你就可以开始随心所欲地使用它,并在必要时偏离惯例

另见


哦。。。好的,我更改了
userModel
选项,它可以正常工作。但是我将更改我的表名以遵守cakePhP约定。非常感谢你的帮助!