Yii - Usando ações

Para criar uma ação em uma classe de controlador, você deve definir um método público cujo nome comece com a palavra ação. Os dados de retorno de uma ação representam a resposta a ser enviada ao usuário final.

Step 1 - Vamos definir a ação hello-world em nosso 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-worldna barra de endereço do navegador da web. Você verá o seguinte.

IDs de ação geralmente são verbos, como criar, atualizar, excluir e assim por diante. Isso ocorre porque as ações geralmente são projetadas para realizar uma mudança específica em um recurso.

Os IDs de ação devem conter apenas esses caracteres - letras do inglês em minúsculas, dígitos, hifens e sublinhados.

Existem dois tipos de ações: inline e autônomo.

As ações embutidas são definidas na classe do controlador. Os nomes das ações são derivados de IDs de ação desta forma -

  • Transforme a primeira letra de todas as palavras do ID da ação em maiúsculas.
  • Remova os hifens.
  • Adicione o prefixo da ação.

Examples -

  • index se torna actionIndex.
  • hello-world (como no exemplo acima) torna-se actionHelloWorld.

Se você planeja reutilizar a mesma ação em locais diferentes, deve defini-la como uma ação autônoma.

Crie uma classe de ação autônoma

Para criar uma classe de ação autônoma, você deve estender yii \ base \ Action ou uma classe filha e implementar um run() método.

Step 1- Crie uma pasta de componentes dentro da raiz do projeto. Dentro dessa pasta, crie um arquivo chamadoGreetingAction.php com o seguinte código.

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

Acabamos de criar uma ação reutilizável. Para usar em nossoExampleController, devemos declarar nossa ação no mapa de ação substituindo o método actions ().

Step 2 - Modifique o ExampleController.php arquivar desta forma.

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

o actions() método retorna uma matriz cujos valores são nomes de classes e as chaves são IDs de ação.

Step 3 - Vá para http://localhost:8080/index.php?r=example/greeting. Você verá a seguinte saída.

Step 4- Você também pode usar ações para redirecionar usuários para outros URLs. Adicione a seguinte ação aoExampleController.php.

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

Agora, se você abrir http://localhost:8080/index.php?r=example/open-google, você será redirecionado para http://google.com.

Os métodos de ação podem receber parâmetros, chamados de parâmetros de ação . Seus valores são recuperados de$_GET usando o nome do parâmetro como a chave.

Step 5 - Adicione a seguinte ação ao nosso controlador de exemplo.

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

Step 6 - Digite o URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world na barra de endereço do seu navegador, você verá a seguinte saída.

Cada controlador possui uma ação padrão. Quando uma rota contém apenas o ID do controlador, significa que a ação padrão é solicitada. Por padrão, a ação éindex. Você pode facilmente substituir essa propriedade no controlador.

Step 7 - Modifique o nosso ExampleController deste jeito.

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

Step 8 - Agora, se você for para http://localhost:8080/index.php?r=example, você verá o seguinte.

Para atender à solicitação, o controlador passará pelo seguinte ciclo de vida -

  • O yii \ base \ Controller:init() método é chamado.

  • O controlador cria uma ação com base no ID da ação.

  • O controlador chama sequencialmente o beforeAction() método do aplicativo da web, módulo e controlador.

  • O controlador executa a ação.

  • O controlador chama sequencialmente o afterAction() método do aplicativo da web, módulo e controlador.

  • O aplicativo atribui o resultado da ação à resposta.

Pontos importantes

Os controladores devem -

  • Seja muito magro. Cada ação deve conter apenas algumas linhas de código.
  • Use visualizações para respostas.
  • Não incorporar HTML.
  • Acesse os dados da solicitação.
  • Métodos de chamada de modelos.
  • Não processa os dados do pedido. Eles devem ser processados ​​no modelo.