咱們是約定優於配置的忠實信徒。花費不多的時間來學習 CakePHP 的約定,長遠來看,會節省你的時間:經過遵循約定,你可以得到免費的功能,而且能夠從維護和追蹤配置文件的夢魘中解脫。約定還形成了系統開發的統一性,使其餘程序員更易於加入和提供幫助。 php
CakePHP 約定提煉於多年的 web 開發經驗和最佳實踐。 咱們建議你在用 CakePHP 編程時使用這些約定,可是咱們也要說明這些原則很容易覆蓋 —— 在與遺留的系統一同工做時,有些東西很是有用。 程序員
控制器類名是複數的、駝峯格式,而且使用 Controller 結尾。 PeopleController 和 LatestArticlesController 都是約定類名的例子。 web
爲控制器編寫的第一個方法極可能是 index() 方法。 當只指定了控制器,但沒有指定動做(action)時,CakePHP 的默認行爲是執行這個控制器的 index() 方法。 例如: http://www.example.com/apples/ 請求會調用ApplesController 的 index() 方法,而 http://www.example.com/apples/view/ 會調用 ApplesController 的 view 方法。 數據庫
在 CakePHP 中,你還能夠經過在控制器方法的名稱前添加下劃線來改變其可見性。 若是一個控制器方法以一個下劃線開頭,這個方法將不能經過 web 訪問,但能夠在內部使用。例如: 編程
1 class NewsController extends AppController { 2 3 public function latest() { 4 $this->_findNewArticles(); 5 } 6 7 protected function _findNewArticles() { 8 // Logic to find latest news articles 9 } 10 }
用 戶能夠象一般那樣訪問 http://www.example.com/news/latest/ , 一些人嘗試訪問http://www.example.com/news/_findNewArticles/ 就會獲得一個錯誤, 由於這個方法是如下劃線開頭的。 你還可使用 PHP 的可見性關鍵詞來指定一個方法是否能經過 url 訪問。非公有的方法將不能被訪問。 app
正像你看到的那樣,單個單詞命名的控制器簡單容易的用小寫的 URL 路徑訪問,ApplesController (在 ‘ApplesController.php’ 定義的)能夠經過 http://example.com/apples 訪問。 函數
多個單詞組成的控制器 能 被下面的幾種功能相同的方法任意扭曲: 工具
都將解析爲 RedApples 控制器的 index 方法。可是這個約定是你的 url 是小寫加下劃線,所以 /red_apples/go_pick 能夠正確的訪問 RedApplesController::go_pick 動做。 post
關於 CakePHP URL 的更多信息和參數處理,參見 路由配置 。 學習
一般,文件名和類名是相匹配的,也遵照駝峯規則。所以在 Cake裏,若是你的類名是 MyNiftyClass,對應的文件名就是 MyNiftyClass.php。 下面的例子是關於如何爲 CakePHP 應用程序中不一樣類型的類所在的文件命名的經典規則:
每一個文件都存放在 app 文件夾的相應子文件夾中。
模型類是單數、駝峯式的。Person、BigPerson 和 ReallyBigPerson 都是符合約定的模型命名實例。
表名與 CakePHP 的模型一致,是單數的,用下劃線間隔單詞的。表 people、 big_people 和 really_big_people 分別對應上面說起的模型。
可使用工具庫 彎曲 檢驗單詞的單/複數形式。更多信息參見 彎曲 。
兩個以上單詞構成的域名用下劃線間隔,如 first_name 。
hasMany、 belongsTo 或者 hasOne 關係中的外鍵默認是用關係表名帶 _id 來識別。 因此,若是 Baker hasMany Cake,cake 表將使用 baker_id 外鍵引用 baker 表。對於多個單詞構成的表,例如 category_types,外鍵就是 category_type_id 。
在模型間使用 hasAndBelongsToMany (HABTM) 關係鏈接表,其命名將按照字母順序(apples_zebras 優先於 zebras_apples)。
每一個 CakePHP 模型中的全部表(包括指望鏈接的表),僅包含單域主鍵用於惟一標識一個行。 也許你但願模型表沒有單域主鍵,但 CakePHP 約定要求表加入一個單域主鍵。若是你想使用表模型,就必須加入一個單域主鍵。
CakePHP 不支持多域主鍵。若是你想要直接控制你的鏈接表數據,使用 query 調用或者按照默認模式加入一個單域主鍵。例如:
1 CREATE TABLE posts_tags ( 2 id INT(10) NOT NULL AUTO_INCREMENT, 3 post_id INT(10) NOT NULL, 4 tag_id INT(10) NOT NULL, 5 PRIMARY KEY(id));
相對於使用 auto-increment 鍵做爲主鍵,你還可使用 char(36) 類型。Cake 將在你使用 Model::save 方法保存一條記錄時使用惟一的 36 個字節的 uuid (String::uuid) 。
視圖模板文件是用控制器的函數命名的,用下劃線間隔多個單詞。PeopleController 類的 getReady() 函數的視圖模板是 /app/View/People/get_ready.ctp。
基本的模式是 /app/View/Controller/underscored_function_name.ctp。
若是使用 CakePHP 約定命名你的應用程序片段,你不須要維護配置就能夠得到須要的功能。這是遵循約定的最終實例:
使 用這些約定,Cakephp 知道 http://example.com/people/ 請求是要調用 PeopleController 類的 index() 函數,Person 模型自動有效(而且自動綁定到數據庫的‘people’表)並渲染一個文件。這些關係徹底不須要配置,你只須要創建相應的文件便可。
如今,你已經瞭解了 CakePHP 的基本原理,你能夠試着經過運行 博客課程 ,看看它們是怎樣一直工做的。