Yii-アクションの使用

コントローラクラスでアクションを作成するには、名前がactionという単語で始まるパブリックメソッドを定義する必要があります。アクションの戻りデータは、エンドユーザーに送信される応答を表します。

Step 1 −でhello-worldアクションを定義しましょう ExampleController

<?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!"; 
      } 
   } 
?>

Step 2 −タイプ http://localhost:8080/index.php?r=example/hello-worldWebブラウザのアドレスバーにあります。次のように表示されます。

アクションIDは通常、作成、更新、削除などの動詞です。これは、リソースの場合、アクションが特定の変更を実行するように設計されていることが多いためです。

アクションIDには、これらの文字(小文字の英字、数字、ハイフン、およびアンダースコア)のみを含める必要があります。

アクションには、インラインとスタンドアロンの2種類があります。

インラインアクションは、コントローラークラスで定義されます。アクションの名前は、この方法でアクションIDから取得されます-

  • アクションIDのすべての単語の最初の文字を大文字に変換します。
  • ハイフンを削除します。
  • アクションプレフィックスを追加します。

Examples

  • indexはactionIndexになります。
  • hello-world(上記の例のように)はactionHelloWorldになります。

同じアクションを別の場所で再利用する場合は、スタンドアロンアクションとして定義する必要があります。

スタンドアロンアクションクラスを作成する

スタンドアロンのアクションクラスを作成するには、yii \ base \ Actionまたは子クラスを拡張し、 run() 方法。

Step 1−プロジェクトルート内にコンポーネントフォルダを作成します。そのフォルダ内にというファイルを作成しますGreetingAction.php 次のコードで。

<?php 
   namespace app\components;
   use yii\base\Action;
   class GreetingAction extends Action {
      public function run() {
         return "Greeting";
      }
   }
?>

再利用可能なアクションを作成しました。私たちの中でそれを使用するにはExampleController、actions()メソッドをオーバーライドして、アクションマップでアクションを宣言する必要があります。

Step 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である配列を返します。

Step 3 −に移動 http://localhost:8080/index.php?r=example/greeting。次の出力が表示されます。

Step 4−アクションを使用して、ユーザーを他のURLにリダイレクトすることもできます。次のアクションをに追加しますExampleController.php

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

今、あなたが開くと http://localhost:8080/index.php?r=example/open-google、にリダイレクトされます http://google.com

アクションメソッドは、アクションパラメータと呼ばれるパラメータを取ることができます。それらの値はから取得されます$_GET パラメータ名をキーとして使用します。

Step 5 −次のアクションをサンプルコントローラーに追加します。

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

Step 6 −URLを入力します http://localhost:8080/index.php?r=example/testparams&first=hello&second=world Webブラウザのアドレスバーに、次の出力が表示されます。

各コントローラーにはデフォルトのアクションがあります。ルートにコントローラIDのみが含まれている場合は、デフォルトのアクションが要求されていることを意味します。デフォルトでは、アクションはindex。コントローラでこのプロパティを簡単に上書きできます。

Step 7 −変更する ExampleController こちらです。

<?php
   namespace app\controllers;
   use yii\web\Controller;
   class ExampleController extends Controller {
      public $defaultAction = "hello-world";
      /* other actions */
   }
?>

Step 8 −さて、 http://localhost:8080/index.php?r=example、次のように表示されます。

要求を満たすために、コントローラーは次のライフサイクルを実行します-

  • yii \ base \ Controller:init() メソッドが呼び出されます。

  • コントローラは、アクションIDに基づいてアクションを作成します。

  • コントローラは順次呼び出します beforeAction() Webアプリケーション、モジュール、およびコントローラーのメソッド。

  • コントローラがアクションを実行します。

  • コントローラは順次呼び出します afterAction() Webアプリケーション、モジュール、およびコントローラーのメソッド。

  • アプリケーションは、アクション結果を応答に割り当てます。

重要なポイント

コントローラーは-

  • 非常に薄くしてください。各アクションには、数行のコードのみを含める必要があります。
  • 応答にはビューを使用します。
  • HTMLを埋め込みません。
  • リクエストデータにアクセスします。
  • モデルのメソッドを呼び出します。
  • リクエストデータを処理しません。これらはモデルで処理する必要があります。