2012-08-09 38 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