Yii使用動作

要創建一個控制器類的動作,應該定義一個公共方法,其名稱以單詞 action 開頭。動作的返回數據表示要發送到終端用戶的響應。

第1步 - 讓我們在 ExampleController 控制器定義一個 hello-world 的動作。

render("example",\[ 'message' => $message \]); } public function actionHelloWorld() { return "Hello world!"; } } ?>

第2步 - 在Web瀏覽器的地址欄中輸入URL=> http://localhost:8080/index.php?r=example/hello-world 會看到以下內容。
Yii使用動作

動作ID通常是動詞,如 create, update, delete 等。這是因爲動作通常被設計來執行在一個特定資源發生變化時。

動作ID應該只包含這些字符 − 小寫字母,數字,連字符和下劃線英文字母。

有兩種類型的動作:內聯和獨立。

內聯動作在控制器類中定義。動作的名稱是這樣從動作ID來源 -

  • 轉換動作ID的所有單詞的第一個字母轉換成大寫

  • 刪除連字符

  • 添加 action 前綴

示例−

  • index 變成 actionIndex.
  • hello-world(如在上面的例子) 變成 actionHelloWorld.

如果您打算在不同的地方重用相同的動作,應該把它定義爲一個獨立的動作。

創建一個獨立的Action類


要創建一個獨立的action類,則應擴展 yii\base\Action 或其子類,並實現 run()方法。

第1步- 在項目根內創建 components 文件夾。在文件夾內創建一個名爲 GreetingAction.php 的文件,並使用下面的代碼。

我們剛剛創建一個可重複使用的動作。在 ExampleController 中使用它,我們應該通過重寫 actions() 方法通過映射動作來聲明動作。

第2步 - 修改 ExampleController.php 文件使用這種方式。

'app\\components\\GreetingAction', \]; } public function actionIndex() { $message = "index action of the ExampleController"; return $this->render("example",\[ 'message' => $message \]); } public function actionHelloWorld() { return "Hello world!"; } } ?>

actions() 方法返回一個數組,鍵是動作ID而其值是類的名稱。

第3步 - 訪問URL=>  http://localhost:8080/index.php?r=example/greeting,會看到下面的輸出。
Yii使用動作

第4步 - 也可以用行動將用戶重定向到其他URL。添加下面的動作到 ExampleController.php 如下。

public function actionOpenGoogle() {
// redirect the user browser to http://yiibai.com
return $this->redirect('http://www.yiibai.com');
}  

現在,如果打開URL => http://localhost:8080/index.php?r=example/open-google, 將被重定向到 http://www.yiibai.com。

動作方法可以帶參數,它被稱作動作參數。它們的值是從$_GET檢索,並使用參數名稱作爲鍵。

第5步 - 以下動作添加到 ExampleController 控制器。

public function actionTestParams($first, $second) {
return "$first & $second";
}

第6步 - 在Web瀏覽器的地址欄中訪問URL=>  http://localhost:8080/index.php?r=example/test-params&first=hello&second=world ,會看到下面的輸出。
Yii使用動作

每個控制器都有一個默認動作。當路由僅包含控制器ID,就意味着將自動請求默認動作。默認情況下,系統默認的操作是:index。可以很容易在控制覆蓋掉這個屬性。

第7步- 使用以下方式來修改 ExampleController 。

第8步 - 現在打開URL=>  http://localhost:8080/index.php?r=example ,將看到以下內容。
Yii使用動作

爲了滿足請求,控制器將經歷以下生命週期 -

  • yii\base\Controller:init() 被調用

  • 控制器將基於動作ID來創建動作

  • 控制器順序地調用Web應用程序,模塊和控制器的 beforeAction()方法

  • 控制器運行操作

  • 控制器順序地調用Web應用程序,模塊,和控制器的afterAction()方法。

  • 應用程序分配動作結果到響應

重要事項


控制器應該 -

  • 每一個動作都應該包含的代碼只有幾行,儘量小

  • 用於響應視圖

  • 不要嵌入HTML

  • 訪問請求數據

  • 調用模型的方法

  • 不處理請求數據。這些應在模型中進行處理