【问题标题】:How does cakePHP naming convention work?cakePHP 命名约定如何工作?
【发布时间】:2012-08-09 02:59:47
【问题描述】:

我对 PHP 比较陌生。开始学习 PHP,后来遇到了 cakePHP,据说可以加快开发速度。

阅读文档和博客教程后,我仍然不明白命名约定。我想在我开始做一些例子之前我不会知道,但是为了让我开始,有人可以向我解释 cakePHP 如何将数据库表关联到控制器/模型层吗?

以下代码是教程的摘要。它是一个将 post id 传递给视图层的控制器方法。数据库表称为“posts”。 $this->Post 指的是 Post 的模型类,对应数据库中帖子的复数形式。

public function view($id = null) {
  $this->Post->id = $id;
  $this->set('post', $this->Post->read());
}

好的,我明白了。然后,在文档中它指的是以下相关性:

ReallyBigPerson 和 real_big_people

所以看起来相关性实际上遵循英语语义中的规则。这是否意味着 cakePHP 有一个单数和复数单词列表隐藏在它工作的某个地方?例如,我可以在不破坏代码的情况下使用以下相关性吗?

这个和这些或男人和男人或脚和脚或驼鹿和驼鹿或鹅和鹅

此外,如果我的数据库中有单数和复数形式的表,它会破坏代码,还是只会关联到复数形式的表?

只是觉得莫名其妙......为什么他们不能像 for like 那样使用前缀匹配命名约定?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    变形器

    CakePHP 使用其Inflector 类来确定事物的复数形式。

    由于命名约定规定模型名称为单数,表名称为复数,因此它使用变形器应用英语语义/规则来确定复数。

    如果您在理解 Inflector 的输出方面需要一些帮助,可以使用CakePHP inflector website。

    复数例子

    Model name: Post
    Table name: posts
    
    Model name: User
    Table name: users
    
    Model name: Sheep
    Table name: sheep
    
    Model name: News
    Table name: news
    
    Model name: Radius
    Table name: radii
    

    检查 Inflector 站点以确保。

    非标准表名

    虽然 CakePHP 为命名和约定提供了标准规则集,但没有一个是一成不变的。如果要更改用于特定模型的表名,只需在模型中指定表名即可:

    class Thing extends AppModel {
        public $useTable = 'somethings';
    }
    

    或者,如果您想要一个不使用表格的模型:

    class Post extends AppModel {
        public $useTable = null;
    }
    

    【讨论】:

    • 谢谢你,这个答案简洁明了+1回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2021-12-27
    • 2010-11-14
    相关资源
    最近更新 更多