【问题标题】:Cakephp 4 Naming conventions policies singular/pluralCakephp 4 命名约定策略单数/复数
【发布时间】:2020-12-13 11:10:34
【问题描述】:

我现在在 Cake 中有一些基本的应用程序。我正在添加授权来定义谁可以这样做。我已经安装了 Authenticate 和 Autorize 模块。现在我正在制定“政策”。我收到了一些错误消息,并注意到了一些差异。假设我们正在为饼干烘焙一个模型。我会有一张桌子“饼干”。然后我可以使用以下命令行烘焙代码;

cake bake all cookies

这不会制定政策,所以我也会单独执行此操作;

cake bake policy cookies

但是,这不起作用。如果我告诉 CookiesController 必须在当前模型上检查授权,它会尝试找到“CookiePolicy”。但是,bake 命令创建了“CookiesPolicy”。我将不得不烤“政策饼干”。这对我来说似乎有点不一致。我错过了什么?有什么想法吗?

【问题讨论】:

  • 单数名称最有可能是正确的,请显示您正在检查的具体资源,“当前模型”有点模糊。
  • 当前模型在我所写的上下文中是 Cookie 的模型。进一步来说;检查用户是否被授权在控制器上执行某个功能。
  • 那还是太含糊了,人们把模型这个术语扔了很多,有时指查询对象,有时指表对象,有时指实体对象,有时指整个模型层。查找的策略取决于您正在检查的对象的类型,如果您正在谈论模型,并且正在查找的策略是单一的,例如 CookiePolicy,那么这表明您可能已经检查了一个实体.但这只是猜测,因此我要求提供详细信息。

标签: cakephp model naming-conventions


【解决方案1】:

这不是不一致的复数形式 - 这两个命令采用不同的参数。

bake all 命令需要一个数据库表名 - 按照惯例,表应该是复数。

bake policy 命令策略可以采用任何一个实体名称、表名称或通用对象名称——但 默认为实体,根据帮助,它有一个--type 参数:

$ cake bake policy --help
Bake policy classes for various supported object types.

Usage:
cake bake policy [options] [<name>]

Options:
 ...
--type            The object type to bake a policy for. If only one
                  argument is used, type will be object.
                  (default: entity)
                  (choices: table|entity|object)
                  (required)
 ...

您的命令正在烘焙实体策略,它们是单数的。如果你想烘焙一个表策略,你必须手动指定类型并使用复数表名,按照惯例:

$ cake bake policy cookies --type=table

Creating file /var/www/html/src/Policy/CookiesTablePolicy.php
Wrote `/var/www/html/src/Policy/CookiesTablePolicy.php`

【讨论】:

  • 解释得很好,谢谢。我还没有意识到这一点。
猜你喜欢
  • 2016-10-28
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多