为什么 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 的来龙去脉,您就可以开始按照自己的意愿调整它,并在必要时偏离惯例。

另见