Учебники

Yii — Использование действий

Чтобы создать действие в классе контроллера, вы должны определить открытый метод, имя которого начинается со слова action. Возвращаемые данные действия представляют собой ответ, который будет отправлен конечному пользователю.

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

Шаг 2 — Введите http: // localhost: 8080 / index.php? R = example / hello-world в адресной строке веб-браузера. Вы увидите следующее.

Hello World Action

Идентификаторы действий обычно являются глаголами, такими как создание, обновление, удаление и так далее. Это связано с тем, что действия часто предназначены для выполнения определенного изменения ресурса.

Идентификаторы действий должны содержать только эти символы — английские буквы в нижнем регистре, цифры, дефисы и подчеркивания.

Существует два типа действий: встроенное и автономное.

Действующие действия определены в классе контроллера. Имена действий выводятся из идентификаторов действий таким образом —

  • Переведите первую букву во всех словах идентификатора действия в верхний регистр.
  • Удалить дефисы.
  • Добавьте префикс действия.

Примеры

  • индекс становится actionIndex.
  • Привет-мир (как в примере выше) становится 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 , мы должны объявить наше действие в карте действий, переопределив метод 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 () возвращает массив, значения которого являются именами классов, а ключи — идентификаторами действий.

Шаг 3 — Перейдите по адресу http: // localhost: 8080 / index.php? R = example /reeting . Вы увидите следующий вывод.

Пример приветствия

Шаг 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, используя имя параметра в качестве ключа.

Шаг 5 — Добавьте следующее действие в наш пример контроллера.

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

Шаг 6 — Введите URL-адрес http: // localhost: 8080 / index.php? R = example / testparams & first = hello & second = world в адресной строке вашего веб-браузера, вы увидите следующий вывод.

Пример Hello World

Каждый контроллер имеет действие по умолчанию. Когда маршрут содержит только идентификатор контроллера, это означает, что запрашивается действие по умолчанию. По умолчанию действие является индексным . Вы можете легко переопределить это свойство в контроллере.

Шаг 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 = , вы увидите следующее.

Запустите Hello World Example1

Для выполнения запроса контроллер будет проходить следующий жизненный цикл —

  • Вызывается метод yii \ base \ Controller: init () .

  • Контроллер создает действие на основе идентификатора действия.

  • Контроллер последовательно вызывает метод beforeAction () веб-приложения, модуля и контроллера.

  • Контроллер запускает действие.

  • Контроллер последовательно вызывает метод afterAction () веб-приложения, модуля и контроллера.

  • Приложение присваивает результат действия ответу.

Вызывается метод yii \ base \ Controller: init () .

Контроллер создает действие на основе идентификатора действия.

Контроллер последовательно вызывает метод beforeAction () веб-приложения, модуля и контроллера.

Контроллер запускает действие.

Контроллер последовательно вызывает метод afterAction () веб-приложения, модуля и контроллера.

Приложение присваивает результат действия ответу.

Важные моменты

Контроллеры должны —