控制器是繼承[[yii\base\controller]]類的物件,負責處理請求和生成響應。 具體來說,控制器從應用主體接管控制後會分析請求資料併發送到模型, 傳送模型結果到檢視,最後生成輸出響應資訊。
控制器是由乙個或多個操作來組成的。
控制器的路由由 模型id(僅存在於控制器屬於非應用的模組)、 控制器id、 操作id 組成。
路由使用如下格式:
controllerid/actionid
如果屬於模組下的控制器,使用如下格式:
moduleid/controllerid/actionid
控制器id:
控制器id遵循以下規則衍生控制器類名:
控制器部署
['controllermap' =>[
//用類名申明 "account" 控制器
//用配置陣列申明 "article" 控制器
'article' =>[
'enablecsrfvalidation' => false,],],]
預設控制器: 框架預設的是 site 控制器,不過可以在 web.php裡配置,
['defaultroute' => 'main',]
建立操作:必須以 action開頭的函式。操作方法的名字大小寫敏感,actonname 不會被認為事操作方法。
獨立操作
獨立操作通過繼承[[yii\base\action]]或它的子類來定義。 例如yii發布的[[yii\web\viewaction]]和[[yii\web\erroraction]]都是獨立操作。
要使用獨立操作,需要通過控制器中覆蓋[[yii\base\controller::actions()]]方法在action map中申明,如下例所示:
1public
function
actions()
2
如上所示, actions() 方法返回鍵為操作id、值為對應操作類名或陣列configurations 的陣列。 和內聯操作不同,獨立操作id可包含任意字元,只要在actions() 方法中申明.
為建立乙個獨立操作類,需要繼承[[yii\base\action]] 或它的子類,並實現公有的名稱為run()的方法, run() 方法的角色和操作方法類似,例如:
useyii\base\action;
class helloworldaction extends
action
}操作引數
預設操作:
不做處理的話,預設操作就是 index操作,當然也可以修改,直接覆蓋父類的 $defaultaction 變數就可以了,例如:
useyii\web\controller;
class sitecontroller extends
controller
}控制器生命週期
處理乙個請求時,應用主體 會根據請求路由建立乙個控制器,控制器經過以下生命週期來完成請求:
在控制器建立和配置後,[[yii\base\controller::init()]] 方法會被呼叫。
控制器根據請求操作id建立乙個操作物件:
如果操作id沒有指定,會使用[[yii\base\controller::defaultaction|default action id]]預設操作id;
如果在[[yii\base\controller::actions()|action map]]找到操作id,會建立乙個獨立操作;
如果操作id對應操作方法,會建立乙個內聯操作;
否則會丟擲[[yii\base\invalidrouteexception]]異常。
控制器按順序呼叫應用主體、模組(如果控制器屬於模組)、控制器的 beforeaction() 方法;
如果任意乙個呼叫返回false,後面未呼叫的beforeaction()會跳過並且操作執行會被取消; action execution will be cancelled.
預設情況下每個 beforeaction() 方法會觸發乙個 beforeaction 事件,在事件中你可以追加事件處理操作;
控制器執行操作:
請求資料解析和填入到操作引數;
控制器按順序呼叫控制器、模組(如果控制器屬於模組)、應用主體的 afteraction() 方法;
預設情況下每個 afteraction() 方法會觸發乙個 afteraction 事件,在事件中你可以追加事件處理操作;
應用主體獲取操作結果並賦值給響應.
yii框架控制器的建立
yii框架採用了mvc模式,所有的控制器都存放在 controllers中,我們自己如何建立乙個控制器呢?首先,在該資料夾下面建立乙個php檔案,明明要求首字母大寫,然後是控制器名稱 controller,比如indexcontroller.php。建立完成後,我們開啟檔案進行編輯 namespac...
yii框架控制器的session處理
use yii web controller class hellocontroller extends controller 設定session session set username 張三 獲取session echo session get username 刪除session sessio...
Yii 框架控制器建立使用及控制器響應操作示例
yii 框架控制器建立使用 在根目錄下的controllers目錄下建立控制器hellocontroller.php use yii web controller class hellocontroller extends controller 訪問位址 basic web index.php?r ...