Yii-using-actions

提供:Dev Guides
移動先:案内検索

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ブラウザのアドレスバーに *http://localhost:8080/index.php?r = example/hello-world と入力します。 以下が表示されます。

Hello World Action

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

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

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

インラインアクションは、コントローラークラスで定義されます。 アクションの名前は、このようにアクションIDから導出されます-

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

-

  • インデックスはactionIndexになります。
  • hello-world(上記の例のように)はactionHelloWorldになります。

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

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

スタンドアロンアクションクラスを作成するには、yii \ base \ Actionまたは子クラスを拡張し、* run()*メソッドを実装する必要があります。

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

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

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

ステップ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 *- *http://localhost: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');
}

これで、 http://localhost:8080/index.php?r = example/open-google を開くと、* http://google.com*にリダイレクトされます。

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

  • ステップ5 *-サンプルコントローラに次のアクションを追加します。
public function actionTestParams($first, $second) {
   return "$first $second";
}

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

Hello Worldサンプルの実行

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

ステップ7 *- *ExampleController をこの方法で変更します。

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

ステップ8 *- *http://localhost:8080/index.php?r = example にアクセスすると、次のように表示されます。

Run Hello World Example1

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

  • yii \ base \ Controller:* init()*メソッドが呼び出されます。
  • コントローラーは、アクションIDに基づいてアクションを作成します。
  • コントローラーは、Webアプリケーション、モジュール、コントローラーの* beforeAction()*メソッドを順番に呼び出します。
  • コントローラーがアクションを実行します。
  • コントローラーは、Webアプリケーション、モジュール、コントローラーの* afterAction()*メソッドを順番に呼び出します。
  • アプリケーションは、アクションの結果を応答に割り当てます。

重要なポイント

コントローラは-

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