- Yii 教程
- Yii - 首頁
- Yii - 概述
- Yii - 安裝
- Yii - 建立頁面
- Yii - 應用結構
- Yii - 入口指令碼
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模組
- Yii - 檢視
- Yii - 佈局
- Yii - 資源
- Yii - 資源轉換
- Yii - 擴充套件
- Yii - 建立擴充套件
- Yii - HTTP 請求
- Yii - 響應
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 規則
- Yii - HTML 表單
- Yii - 驗證
- Yii - 特設驗證
- Yii - AJAX 驗證
- Yii - 會話
- Yii - 使用快閃記憶體資料
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 檔案上傳
- Yii - 格式化
- Yii - 分頁
- Yii - 排序
- Yii - 屬性
- Yii - 資料提供者
- Yii - 資料小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 建立事件
- Yii - 行為
- Yii - 建立行為
- Yii - 配置
- Yii - 依賴注入
- Yii - 資料庫訪問
- Yii - 資料訪問物件
- Yii - 查詢構建器
- Yii - 活動記錄
- Yii - 資料庫遷移
- Yii - 主題
- Yii - RESTful API
- Yii - RESTful API 實戰
- Yii - 欄位
- Yii - 測試
- Yii - 快取
- Yii - 片段快取
- Yii - 別名
- Yii - 日誌記錄
- Yii - 錯誤處理
- Yii - 身份驗證
- Yii - 授權
- Yii - 本地化
- Yii - Gii
- Gii – 建立模型
- Gii – 生成控制器
- Gii – 生成模組
- Yii 有用資源
- Yii - 快速指南
- Yii - 有用資源
- Yii - 討論
Yii - 使用操作
在控制器類中建立操作,您應該定義一個以“action”開頭的方法。操作的返回值表示要傳送給終端使用者的響應。
步驟 1 - 讓我們在 ExampleController 中定義 hello-world 操作。
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public function actionIndex() {
$message = "index action of the ExampleController";
return $this->render("example",[
'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
步驟 2 - 在 Web 瀏覽器的位址列中鍵入 https://:8080/index.php?r=example/hello-world。您將看到以下內容。
操作 ID 通常是動詞,例如 create、update、delete 等。這是因為操作通常被設計為對資源執行特定的更改。
操作 ID 應僅包含以下字元 - 小寫英文字母、數字、連字元和下劃線。
操作有兩種型別:內聯和獨立。
內聯操作在控制器類中定義。操作的名稱透過以下方式從操作 ID 派生 -
- 將操作 ID 中所有單詞的第一個字母轉換為大寫。
- 刪除連字元。
- 新增操作字首。
示例 -
- index 變為 actionIndex。
- hello-world(如上例所示)變為 actionHelloWorld。
如果您計劃在不同的地方重用相同的操作,則應將其定義為獨立操作。
建立獨立操作類
要建立獨立操作類,您應該擴充套件 yii\base\Action 或子類,並實現 run() 方法。
步驟 1 - 在專案根目錄下建立一個 components 資料夾。在該資料夾內建立一個名為 GreetingAction.php 的檔案,其中包含以下程式碼。
<?php
namespace app\components;
use yii\base\Action;
class GreetingAction extends Action {
public function run() {
return "Greeting";
}
}
?>
我們剛剛建立了一個可重用的操作。要在我們的 ExampleController 中使用它,我們應該透過覆蓋 actions() 方法在操作對映中宣告我們的操作。
步驟 2 - 以這種方式修改 ExampleController.php 檔案。
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public function actions() {
return [
'greeting' => '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 - 轉到 https://:8080/index.php?r=example/greeting。您將看到以下輸出。
步驟 4 - 您還可以使用操作將使用者重定向到其他 URL。將以下操作新增到 ExampleController.php。
public function actionOpenGoogle() {
// redirect the user browser to http://google.com
return $this->redirect('http://google.com');
}
現在,如果您開啟 https://:8080/index.php?r=example/open-google,您將被重定向到 http://google.com。
操作方法可以採用引數,稱為操作引數。它們的值使用引數名稱作為鍵從 $_GET 中檢索。
步驟 5 - 將以下操作新增到我們的示例控制器。
public function actionTestParams($first, $second) {
return "$first $second";
}
步驟 6 - 在 Web 瀏覽器的位址列中鍵入 URL https://:8080/index.php?r=example/testparams&first=hello&second=world,您將看到以下輸出。
每個控制器都有一個預設操作。當路由僅包含控制器 ID 時,表示請求了預設操作。預設情況下,操作為 index。您可以在控制器中輕鬆覆蓋此屬性。
步驟 7 - 以這種方式修改我們的 ExampleController。
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public $defaultAction = "hello-world";
/* other actions */
}
?>
步驟 8 - 現在,如果您轉到 https://:8080/index.php?r=example,您將看到以下內容。
為了滿足請求,控制器將經歷以下生命週期 -
呼叫 yii\base\Controller:init() 方法。
控制器根據操作 ID 建立一個操作。
控制器依次呼叫 Web 應用程式、模組和控制器的 beforeAction() 方法。
控制器執行操作。
控制器依次呼叫 Web 應用程式、模組和控制器的 afterAction() 方法。
應用程式將操作結果分配給響應。
重要事項
控制器應 -
- 非常精簡。每個操作都應只包含幾行程式碼。
- 使用檢視進行響應。
- 不嵌入 HTML。
- 訪問請求資料。
- 呼叫模型的方法。
- 不處理請求資料。這些應在模型中處理。