2012-08-09 60 views
5

我对PHP比较陌生。开始学习PHP,但后来遇到了CakePHP,这是为了加快开发时间。cakePHP命名约定是如何工作的?

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

下面的代码是本教程的摘要。它是一个控制器方法,将post ID传递给视图层。数据库表被称为“帖子”。 $ this-> Post表示Post的模型类,它与数据库中的复数形式的帖子相关。

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

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

ReallyBigPerson和really_big_people

因此它似乎相关实际遵循英语语义规则。这是否意味着cakePHP具有隐藏在某个地方的单数和复数单词列表?例如,我可以使用下面的关联而不破坏代码吗?

这和这些男人和男人足和脚麋鹿和驼鹿鹅,鹅

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

只要找到它莫名其妙...为什么他们不能像命名约定像前缀一样?

回答

17

变形器

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 

检查变形器网站是肯定的。

非标表名

虽然CakePHP中提供了命名和约定的标准规则集,没有它在石头设置。如果要更改用于特定型号的表的名称,只需在模型中指定表名:

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

或者,如果你想在不使用表的模型:

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

谢谢,这个答案很简洁,直接回答+1。 – chaser 2012-08-09 04:49:25