我們是約定優于配置的忠實信徒。花費很少的時間來學習 CakePHP 的約定,長遠來看,會節省你的時間:通過遵循約定,你能夠獲得免費的功能,并且可以從維護和追蹤配置文件的夢魘中解脫。約定還造成了系統開發的統一性,使其他程序員更易于加入和提供幫助。
CakePHP 約定提煉于多年的 web 開發經驗和最佳實踐。 我們建議你在用 CakePHP 編程時使用這些約定,但是我們也要說明這些原則很容易覆蓋 ―― 在與遺留的系統一同工作時,有些東西非常有用。
控制器類名是復數的、駝峰格式,并且使用 Controller 結尾。 PeopleController 和 LatestArticlesController 都是約定類名的例子。
為控制器編寫的第一個方法很可能是 index() 方法。 當只指定了控制器,但沒有指定動作(action)時,CakePHP 的默認行為是執行這個控制器的 index() 方法。 例如: 請求會調用ApplesController 的 index() 方法,而調用 ApplesController 的 view 方法。
在 CakePHP 中,你還可以通過在控制器方法的名稱前添加下劃線來改變其可見性。 如果一個控制器方法以一個下劃線開頭,這個方法將不能通過 web 訪問,但可以在內部使用。例如:
用戶可以象通常那樣訪問, 一些人嘗試訪問就會得到一個錯誤, 因為這個方法是以下劃線開頭的。 你還可以使用 PHP 的可見性關鍵詞來指定一個方法是否能通過 url 訪問。非公有的方法將不能被訪問。
正像你看到的那樣,單個單詞命名的控制器簡單容易的用小寫的 URL 路徑訪問,ApplesController (在 ‘ApplesController.php’ 定義的)可以通過 訪問。
多個單詞組成的控制器 能 被下面的幾種功能相同的方法任意扭曲:
都將解析為 RedApples 控制器的 index 方法。但是這個約定是你的 url 是小寫加下劃線,因此 /red_apples/go_pick 可以正確的訪問 RedApplesController::go_pick 動作。
關于 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 調用或者按照默認模式加入一個單域主鍵。例如:
相對于使用 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 知道 請求是要調用 PeopleController 類的 index() 函數,Person 模型自動有效(并且自動綁定到數據庫的‘people’表)并渲染一個文件。這些關系完全不需要配置,你只需要建立相應的文件即可。
現在,你已經了解了 CakePHP 的基本原理,多寶你可以試著通過運行 博客課程 ,看看它們是怎樣一直工作的。