Yii - Utilizzo di azioni

Per creare un'azione in una classe controller, è necessario definire un metodo pubblico il cui nome inizia con la parola azione. I dati di ritorno di un'azione rappresentano la risposta da inviare all'utente finale.

Step 1 - Definiamo l'azione hello-world nel nostro 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-worldnella barra degli indirizzi del browser web. Vedrai quanto segue.

Gli ID azione sono solitamente verbi, come creare, aggiornare, eliminare e così via. Questo perché le azioni sono spesso progettate per eseguire una modifica particolare se una risorsa.

Gli ID azione devono contenere solo questi caratteri: lettere inglesi in minuscolo, cifre, trattini e trattini bassi.

Esistono due tipi di azioni: inline e standalone.

Le azioni inline sono definite nella classe controller. I nomi delle azioni derivano dagli ID azione in questo modo:

  • Trasforma in maiuscolo la prima lettera di tutte le parole dell'ID azione.
  • Rimuovi i trattini.
  • Aggiungi il prefisso dell'azione.

Examples -

  • index diventa actionIndex.
  • hello-world (come nell'esempio sopra) diventa actionHelloWorld.

Se prevedi di riutilizzare la stessa azione in luoghi diversi, dovresti definirla come azione autonoma.

Crea una classe d'azione autonoma

Per creare una classe di azione autonoma, è necessario estendere yii \ base \ Action o una classe figlia e implementare un file run() metodo.

Step 1- Crea una cartella dei componenti all'interno della radice del tuo progetto. All'interno di quella cartella crea un file chiamatoGreetingAction.php con il seguente codice.

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

Abbiamo appena creato un'azione riutilizzabile. Per usarlo nel nostroExampleController, dovremmo dichiarare la nostra azione nella mappa delle azioni sovrascrivendo il metodo actions ().

Step 2 - Modifica il file ExampleController.php archiviare in questo modo.

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

Il actions() restituisce un array i cui valori sono nomi di classi e le chiavi sono ID di azione.

Step 3 - Vai a http://localhost:8080/index.php?r=example/greeting. Vedrai il seguente output.

Step 4- Puoi anche utilizzare le azioni per reindirizzare gli utenti ad altri URL. Aggiungi la seguente azione al fileExampleController.php.

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

Ora, se apri http://localhost:8080/index.php?r=example/open-google, verrai reindirizzato a http://google.com.

I metodi di azione possono accettare parametri, chiamati parametri di azione . I loro valori vengono recuperati da$_GET utilizzando il nome del parametro come chiave.

Step 5 - Aggiungi la seguente azione al nostro controller di esempio.

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

Step 6 - Digita l'URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world nella barra degli indirizzi del tuo browser web, vedrai il seguente output.

Ogni controller ha un'azione predefinita. Quando una rotta contiene solo l'ID del controller, significa che è richiesta l'azione predefinita. Per impostazione predefinita, l'azione èindex. Puoi facilmente sovrascrivere questa proprietà nel controller.

Step 7 - Modifica il nostro ExampleController per di qua.

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

Step 8 - Ora, se vai a http://localhost:8080/index.php?r=example, vedrai quanto segue.

Per soddisfare la richiesta, il titolare del trattamento subirà il seguente ciclo di vita:

  • Il yii \ base \ Controller:init() viene chiamato il metodo.

  • Il controller crea un'azione in base all'ID dell'azione.

  • Il controller chiama in sequenza il file beforeAction() metodo dell'applicazione Web, del modulo e del controller.

  • Il controller esegue l'azione.

  • Il controller chiama in sequenza il file afterAction() metodo dell'applicazione Web, del modulo e del controller.

  • L'applicazione assegna il risultato dell'azione alla risposta.

Punti importanti

I Titolari dovrebbero:

  • Sii molto magro. Ogni azione dovrebbe contenere solo poche righe di codice.
  • Utilizza le visualizzazioni per le risposte.
  • Non incorporare HTML.
  • Accedi ai dati della richiesta.
  • Chiama metodi di modelli.
  • Non elaborare i dati della richiesta. Questi dovrebbero essere elaborati nel modello.