cakePHP命名约定如何工作?

cha*_*ser 5 cakephp

我对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());
}
Run Code Online (Sandbox Code Playgroud)

好的,我明白了.然后,在文档中它引用了以下相关性:

ReallyBigPerson和really_big_people

因此,似乎相关性实际上遵循英语语义中的规则.这是否意味着cakePHP有一个隐藏在某处的单数和复数单词的列表?例如,我可以在不破坏代码的情况下使用以下关联吗?

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

此外,如果我在我的数据库中同时具有单数和复数形式的表,它会破坏代码,还是仅仅与复数形式的表相关联?

只是觉得令人费解......为什么他们不能像命名前缀一样匹配命名约定?

Pre*_*ant 17

变形器

CakePHP使用它的Inflector类来确定复数事物.

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

如果您需要一些帮助来理解Inflector的输出,您可以使用CakePHP inflector网站.

多个例子

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
Run Code Online (Sandbox Code Playgroud)

检查Inflector站点以确定.

非标准表名称

虽然CakePHP为命名和约定提供了标准规则集,但它们都不是一成不变的.如果要更改用于特定模型的表的名称,只需在模型中指定表名:

class Thing extends AppModel {
    public $useTable = 'somethings';
}
Run Code Online (Sandbox Code Playgroud)

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

class Post extends AppModel {
    public $useTable = null;
}
Run Code Online (Sandbox Code Playgroud)