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。您將看到以下內容。

Hello World Action

操作 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。您將看到以下輸出。

Greeting Example

步驟 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,您將看到以下輸出。

Run Hello World Example

每個控制器都有一個預設操作。當路由僅包含控制器 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,您將看到以下內容。

Run Hello World Example1

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

  • 呼叫 yii\base\Controller:init() 方法。

  • 控制器根據操作 ID 建立一個操作。

  • 控制器依次呼叫 Web 應用程式、模組和控制器的 beforeAction() 方法。

  • 控制器執行操作。

  • 控制器依次呼叫 Web 應用程式、模組和控制器的 afterAction() 方法。

  • 應用程式將操作結果分配給響應。

重要事項

控制器應 -

  • 非常精簡。每個操作都應只包含幾行程式碼。
  • 使用檢視進行響應。
  • 不嵌入 HTML。
  • 訪問請求資料。
  • 呼叫模型的方法。
  • 不處理請求資料。這些應在模型中處理。
廣告

© . All rights reserved.