Yii - Usando acciones

Para crear una acción en una clase de controlador, debe definir un método público cuyo nombre comience con la palabra acción. Los datos de retorno de una acción representan la respuesta que se enviará al usuario final.

Step 1 - Definamos la acción hello-world en nuestro 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 - Tipo http://localhost:8080/index.php?r=example/hello-worlden la barra de direcciones del navegador web. Verá lo siguiente.

Los ID de acción suelen ser verbos, como crear, actualizar, eliminar, etc. Esto se debe a que las acciones a menudo están diseñadas para realizar un cambio particular en un recurso.

Los ID de acción deben contener solo estos caracteres: letras en inglés en minúsculas, dígitos, guiones y guiones bajos.

Hay dos tipos de acciones: en línea y autónomas.

Las acciones en línea se definen en la clase de controlador. Los nombres de las acciones se derivan de los ID de acción de esta manera:

  • Convierta la primera letra de todas las palabras del ID de acción en mayúsculas.
  • Quite los guiones.
  • Agrega el prefijo de acción.

Examples -

  • index se convierte en actionIndex.
  • hello-world (como en el ejemplo anterior) se convierte en actionHelloWorld.

Si planea reutilizar la misma acción en diferentes lugares, debe definirla como una acción independiente.

Crear una clase de acción independiente

Para crear una clase de acción independiente, debe extender yii \ base \ Action o una clase secundaria, e implementar una run() método.

Step 1- Cree una carpeta de componentes dentro de la raíz de su proyecto. Dentro de esa carpeta crea un archivo llamadoGreetingAction.php con el siguiente código.

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

Acabamos de crear una acción reutilizable. Para usarlo en nuestroExampleController, debemos declarar nuestra acción en el mapa de acciones anulando el método actions ().

Step 2 - Modificar el ExampleController.php archivar de esta manera.

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

los actions() El método devuelve una matriz cuyos valores son nombres de clase y claves son ID de acción.

Step 3 - Ir a http://localhost:8080/index.php?r=example/greeting. Verá el siguiente resultado.

Step 4- También puede utilizar acciones para redirigir a los usuarios a otras URL. Agregue la siguiente acción alExampleController.php.

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

Ahora, si abres http://localhost:8080/index.php?r=example/open-google, será redirigido a http://google.com.

Los métodos de acción pueden tomar parámetros, llamados parámetros de acción . Sus valores se recuperan de$_GET utilizando el nombre del parámetro como clave.

Step 5 - Agregue la siguiente acción a nuestro controlador de ejemplo.

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

Step 6 - Escriba la URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world en la barra de direcciones de su navegador web, verá el siguiente resultado.

Cada controlador tiene una acción predeterminada. Cuando una ruta contiene solo el ID del controlador, significa que se solicita la acción predeterminada. Por defecto, la acción esindex. Puede anular fácilmente esta propiedad en el controlador.

Step 7 - Modificar nuestro ExampleController de esta manera.

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

Step 8 - Ahora, si vas a http://localhost:8080/index.php?r=example, verá lo siguiente.

Para cumplir con la solicitud, el controlador pasará por el siguiente ciclo de vida:

  • El controlador yii \ base \:init() se llama al método.

  • El controlador crea una acción basada en el ID de la acción.

  • El controlador llama secuencialmente al beforeAction() método de la aplicación web, el módulo y el controlador.

  • El controlador ejecuta la acción.

  • El controlador llama secuencialmente al afterAction() método de la aplicación web, el módulo y el controlador.

  • La aplicación asigna el resultado de la acción a la respuesta.

Puntos importantes

Los controladores deben:

  • Sea muy delgado. Cada acción debe contener solo unas pocas líneas de código.
  • Utilice Vistas para las respuestas.
  • No incrustar HTML.
  • Accede a los datos de la solicitud.
  • Llamar a métodos de modelos.
  • No procesar los datos de la solicitud. Estos deben procesarse en el modelo.