【问题标题】:Why does CakePHP use different plural/singular naming conventions?为什么 CakePHP 使用不同的复数/单数命名约定?
【发布时间】:2010-12-17 16:23:35
【问题描述】:

也许有人可以在这里解释一下为什么 CakePHP 有一个惯例,即对 db 表和控制器使用复数名称,而对模型使用单数名称?为什么不总是使用单数,或者总是使用复数?对我来说,总是不得不思考“现在我在这里使用复数还是单数?”似乎令人困惑。 (或者有没有一种简单的方法来记住??)然后你就有了结合使用两者的连接表!

我认为某处有充分的理由,但只是没有遇到过。
(我真的希望这不仅仅是因为 Ruby-on-Rails 那样工作。)

西蒙。

【问题讨论】:

  • 这可能是因为 ruby​​ on rails :)
  • 不知道。我们总是使用“name”、“table”和“primaryKey”可选字段(参见模型文档)来命名我们想要的东西。我们将我们想要的东西大写,当我们想要的时候,让一切都变得单一。不过,除此之外,我真的很喜欢 Cake。
  • 也可能是因为 CakePHP 是由使用 PHP 的人设计的,定义不一致。
  • 尼拉莫:好主意。也许我应该按我的意愿命名。 ;-)
  • Noah:我认为 PHP 继承了一些不一致的地方,因为不同的库被添加到具有不同命名约定的基础中。 CakePHP 似乎从一开始就是这样设计的(RoR 也是如此!)我真的不明白为什么。

标签: cakephp naming-conventions inflection rationale


【解决方案1】:

CakePHP Conventions

CakePHP 的约定是从多年的 Web 开发经验和最佳实践中提炼出来的。虽然我们建议您在使用 CakePHP 开发时使用这些约定,但我们应该提到,其中许多原则很容易被覆盖——这在使用遗留系统时特别方便。

我认为我们的想法是让阅读更流畅,并以正确的方式思考元素。数据库表总是复数的,因为它们包含许多记录。该模型是单一的,因为您应该考虑使用它查找单个记录。 model_id 的选择字段将自动从 $models 获取其选项,因为您选择了多个选项之一。

$model = $this->Model->find('first');  // reads like English
$model = $this->Models->find('first'); // slightly trips you up

$models = $this->Model->find('all');   // works okay
$models = $this->Models->find('all');  // more logical, but "this models" still trips

它并不总是完美的,但是一旦你习惯了它,我认为它是一个很好的约定。不过,我可以看到它在开始时是多么令人困惑。

【讨论】:

  • 同意。该模型是您的数据模式的抽象,在英语中它们总是单数(您不会说“汽车的本质是什么”)。控制器处理抽象的多个实例(它将它们全部处理)。 IMO 这与我们用英语做事的方式非常一致。
【解决方案2】:

有没有简单的记忆方法?

是的,关于命名约定重要的部分(db/model/controller)...如果它不是模型的名称(即User)或外键的名称(即@ 987654322@),那么它是复数。除了这两件事之外,一切基本上都是复数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多