Yii 偏愛規范勝于配置。遵循規范可使你能夠創建成熟的Yii應用而不需要編寫、維護復雜的配置。 當然了,在必要時,Yii 仍然可以在幾乎所有的方面通過配置實現自定義。
下面我們講解 Yii 編程中推薦的開發規范。 為簡單起見,我們假設 WebRoot 是 Yii 應用安裝的目錄。
1. URL
默認情況下,Yii 識別如下格式的 URL:
http://hostname/index.php?r=ControllerID/ActionID
r
?GET 變量意為?路由(route)?,它可以被Yii解析為 控制器和動作。 如果?ActionID
?被省略,控制器將使用默認的動作(在CController::defaultAction中定義); 如果?ControllerID
?也被省略(或者?r
?變量不存在),應用將使用默認的控制器 (在CWebApplication::defaultController中定義)。
通過?CUrlManager?的幫助,可以創建更加可識別,更加 SEO 友好的 URL,例如http://hostname/ControllerID/ActionID.html
。此功能在?URL Management?中有詳細講解。
2. 代碼
Yii 推薦命名變量、函數和類時使用 駝峰風格,即每個單詞的首字母大寫并連在一起,中間無空格。 變量名和函數名應該使它們的第一個單詞全部小寫,以使其區別于類名(例如:$basePath
,?runController()
,LinkPager
)。對私有類成員變量來說,我們推薦以下劃線作為其名字前綴(例如:?$_actionList
)。
由于在 PHP 5.3.0 之前不支持名字空間,我們推薦類要通過某種獨立的方式命名,以避免和第三方類發生沖突。鑒于此, 所有的 Yii 框架類名以 "C" 作前綴。
一個針對控制器名字的特殊規則是它們必須以單詞?Controller
?結尾。那么控制器 ID 即類名的首字母小寫并去掉單詞?Controller
。 例如,PageController
?類的 ID 就是?page
?。這個規則使應用更加安全。它還使控制器相關的URL更加簡單(例如?/index.php?r=page/index
?而不是?/index.php?r=PageController/index
)。
3. 配置
配置是一個鍵值對數組。每個鍵代表了所配置的對象中的屬性名,每個值則為相應屬性的初始值。 例如,array('name'=>'My application', 'basePath'=>'./protected')
?初始化了?name
?和?basePath
?屬性為它們相應的數組值。
類中任何可寫的屬性都可以被配置。如果沒有配置,屬性將使用它們的默認值。 當配置一個屬性時,最好閱讀相應文檔以保證初始值正確。
4. 文件
命名和使用文件的規范取決于它們的類型。
類文件應以它們包含的公有類命名。例如,?CController?類位于?CController.php
?文件中。 公有類是可以被任何其他類使用的類。每個類文件應包含最多一個公有類。 私有類(只能被一個公有類使用的類)可以放在使用此類的公有類所在的文件中。
視圖文件應以視圖的名字命名。例如,?index
?視圖位于?index.php
?文件中。 視圖文件是一個PHP腳本文件,它包含了用于呈現內容的 HTML和PHP代碼。
配置文件可以任意命名。 配置文件是一個PHP腳本,它的主要目的是返回一個體現配置的關聯數組。
5. 目錄
Yii 假定了一系列默認的目錄用于不同的場合。如果需要,每個目錄都可以自定義。
WebRoot/protected
: 這是?應用基礎目錄, 是放置所有安全敏感的PHP腳本和數據文件的地方。Yii 有一個默認的?application
?別名指向此目錄。 此目錄及目錄中的文件應該保護起來防止Web用戶訪問。它可以通過?CWebApplication::basePath?自定義。WebRoot/protected/runtime
: 此目錄放置應用在運行時產生的私有臨時文件。 此目錄必須對 Web 服務器進程可寫。它可以通過?CApplication::runtimePath自定義。WebRoot/protected/extensions
: 此目錄放置所有第三方擴展。 它可以通過?CApplication::extensionPath自定義。WebRoot/protected/modules
: 此目錄放置所有的應用?模塊,每個模塊使用一個子目錄。WebRoot/protected/controllers
: 此目錄放置所有控制器類文件。 它可以通過CWebApplication::controllerPath?自定義。WebRoot/protected/views
: 此目錄放置所有試圖文件, 包含控制器視圖,布局視圖和系統視圖。 它可以通過?CWebApplication::viewPath?自定義。WebRoot/protected/views/ControllerID
: 此目錄放置單個控制器類中使用的視圖文件。 此處的ControllerID
?是指控制器的 ID 。它可以通過?CController::viewPath?自定義。WebRoot/protected/views/layouts
: 此目錄放置所有布局視圖文件。它可以通過CWebApplication::layoutPath?自定義。WebRoot/protected/views/system
: 此目錄放置所有系統視圖文件。 系統視圖文件是用于顯示異常和錯誤的模板。它可以通過?CWebApplication::systemViewPath?自定義。WebRoot/assets
: 此目錄放置公共資源文件。 資源文件是可以被發布的,可由Web用戶訪問的私有文件。此目錄必須對 Web 服務器進程可寫。 它可以通過?CAssetManager::basePath?自定義WebRoot/themes
: 此目錄放置應用使用的不同的主題。每個子目錄即一個主題,主題的名字即目錄的名字。 它可以通過?CThemeManager::basePath?自定義。
6. 數據庫
多數Web 應用是由數據庫驅動的。為了最佳時間,我們 推薦在對表和列命名時使用如下命名規范。注意,這些規范并不是 Yii 所必須的。
- 數據庫表名和列名都使用小寫命名。
- 名字中的單詞應使用下劃線分割 (例如?
product_order
)。 - 對于表名,你既可以使用單數也可以使用復數。但 不要 同時使用兩者。為簡單起見,我們推薦使用單數名字。
- 表名可以使用一個通用前綴,例如?
tbl_
?。這樣當應用所使用的表和另一個應用說使用的表共存于同一個數據庫中時就特別有用。 這兩個應用的表可以通過使用不同的表前綴很容易地區別開。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://phpxs.com/post/1290/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料