为什么 auth 组件访问 `users` table,尽管我没有使用名为 `Users` 的模型?
Why does the auth component access the `users` table, despite me not using a model named `Users`?
我正在使用 cakephp 4,当我尝试登录一个用户时,它说我没有 table 调用的用户。但是我在我的代码中没有使用“用户”,只有“用户”没有“s”。
我没有找到错误以及如何解决它。
当您反对命名约定时很容易发生这种情况,因为 CakePHP 框架遵循约定优于配置的方法。
数据库 table 名称的约定(以及 table class 就此而言)是使用复数形式,因此 users
而不是 user
,因此只要 CakePHP 提供 model/table 名称作为默认名称,它就会相应地使用复数名称。
默认情况下,auth 组件的身份验证器(顺便说一句,已弃用,您应该考虑使用 authentication plugin 代替)配置为使用 Users
model/table 别名,复数。相关选项是 userModel
,如果你想使用不同的模型,你需要相应地改变它。还有其他选项也使用复数形式,比如那些定义 URL 数组的选项,它们使用 Users
来定位 UsersController
(控制器名称按照惯例也是复数形式)。
模型层也有实体,实体的约定是使用单数名称,所以User
。这是 table 不使用单数名称的另一个原因,即使您可以通过配置,也很容易与实体 class 名称混淆。
我强烈建议您遵循约定,并使用烘焙控制台来创建模型、控制器等,尤其是如果您是初学者。一旦您熟悉了 CakePHP 的来龙去脉,您就可以开始按照自己的意愿调整它,并在必要时偏离惯例。
另见
我正在使用 cakephp 4,当我尝试登录一个用户时,它说我没有 table 调用的用户。但是我在我的代码中没有使用“用户”,只有“用户”没有“s”。
我没有找到错误以及如何解决它。
当您反对命名约定时很容易发生这种情况,因为 CakePHP 框架遵循约定优于配置的方法。
数据库 table 名称的约定(以及 table class 就此而言)是使用复数形式,因此 users
而不是 user
,因此只要 CakePHP 提供 model/table 名称作为默认名称,它就会相应地使用复数名称。
默认情况下,auth 组件的身份验证器(顺便说一句,已弃用,您应该考虑使用 authentication plugin 代替)配置为使用 Users
model/table 别名,复数。相关选项是 userModel
,如果你想使用不同的模型,你需要相应地改变它。还有其他选项也使用复数形式,比如那些定义 URL 数组的选项,它们使用 Users
来定位 UsersController
(控制器名称按照惯例也是复数形式)。
模型层也有实体,实体的约定是使用单数名称,所以User
。这是 table 不使用单数名称的另一个原因,即使您可以通过配置,也很容易与实体 class 名称混淆。
我强烈建议您遵循约定,并使用烘焙控制台来创建模型、控制器等,尤其是如果您是初学者。一旦您熟悉了 CakePHP 的来龙去脉,您就可以开始按照自己的意愿调整它,并在必要时偏离惯例。
另见