Yii - Utilisation des actions

Pour créer une action dans une classe de contrôleur, vous devez définir une méthode publique dont le nom commence par le mot action. Les données de retour d'une action représentent la réponse à envoyer à l'utilisateur final.

Step 1 - Définissons l'action hello-world dans notre 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 - Type http://localhost:8080/index.php?r=example/hello-worlddans la barre d'adresse du navigateur Web. Vous verrez ce qui suit.

Les ID d'action sont généralement des verbes, tels que créer, mettre à jour, supprimer, etc. En effet, les actions sont souvent conçues pour effectuer un changement particulier si une ressource.

Les ID d'action ne doivent contenir que ces caractères: lettres anglaises en minuscules, chiffres, traits d'union et traits de soulignement.

Il existe deux types d'actions: en ligne et autonome.

Les actions en ligne sont définies dans la classe de contrôleur. Les noms des actions sont dérivés des ID d'action de cette façon -

  • Transformez la première lettre de tous les mots de l'ID d'action en majuscules.
  • Supprimez les traits d'union.
  • Ajoutez le préfixe d'action.

Examples -

  • index devient actionIndex.
  • hello-world (comme dans l'exemple ci-dessus) devient actionHelloWorld.

Si vous prévoyez de réutiliser la même action à différents endroits, vous devez la définir comme une action autonome.

Créer une classe d'action autonome

Pour créer une classe d'action autonome, vous devez étendre yii \ base \ Action ou une classe enfant, et implémenter un run() méthode.

Step 1- Créez un dossier de composants dans la racine de votre projet. Dans ce dossier, créez un fichier appeléGreetingAction.php avec le code suivant.

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

Nous venons de créer une action réutilisable. Pour l'utiliser dans notreExampleController, nous devons déclarer notre action dans la carte d'actions en remplaçant la méthode actions ().

Step 2 - Modifier le ExampleController.php classer de cette façon.

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

le actions() La méthode renvoie un tableau dont les valeurs sont des noms de classe et les clés sont des ID d'action.

Step 3 - Aller à http://localhost:8080/index.php?r=example/greeting. Vous verrez la sortie suivante.

Step 4- Vous pouvez également utiliser des actions pour rediriger les utilisateurs vers d'autres URL. Ajoutez l'action suivante à laExampleController.php.

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

Maintenant, si vous ouvrez http://localhost:8080/index.php?r=example/open-google, vous serez redirigé vers http://google.com.

Les méthodes d'action peuvent prendre des paramètres, appelés paramètres d'action . Leurs valeurs sont extraites de$_GET en utilisant le nom du paramètre comme clé.

Step 5 - Ajoutez l'action suivante à notre exemple de contrôleur.

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

Step 6 - Tapez l'URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world dans la barre d'adresse de votre navigateur Web, vous verrez la sortie suivante.

Chaque contrôleur a une action par défaut. Lorsqu'une route contient uniquement l'ID du contrôleur, cela signifie que l'action par défaut est demandée. Par défaut, l'action estindex. Vous pouvez facilement remplacer cette propriété dans le contrôleur.

Step 7 - Modifier notre ExampleController par ici.

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

Step 8 - Maintenant, si tu vas à http://localhost:8080/index.php?r=example, vous verrez ce qui suit.

Pour répondre à la demande, le contrôleur subira le cycle de vie suivant -

  • Le contrôleur yii \ base \:init() méthode est appelée.

  • Le contrôleur crée une action en fonction de l'ID d'action.

  • Le contrôleur appelle séquentiellement le beforeAction() méthode de l'application Web, du module et du contrôleur.

  • Le contrôleur exécute l'action.

  • Le contrôleur appelle séquentiellement le afterAction() méthode de l'application Web, du module et du contrôleur.

  • L'application affecte le résultat de l'action à la réponse.

Les points importants

Les contrôleurs devraient -

  • Soyez très mince. Chaque action ne doit contenir que quelques lignes de code.
  • Utilisez des vues pour les réponses.
  • Ne pas intégrer HTML.
  • Accédez aux données de la demande.
  • Appeler des méthodes de modèles.
  • Ne pas traiter les données de la demande. Ceux-ci doivent être traités dans le modèle.