Yii - Création d'un événement

Dans ce chapitre nous verrons comment créer un événement dans Yii. Pour montrer les événements en action, nous avons besoin de données.

Préparation de la base de données

Step 1- Créez une nouvelle base de données. La base de données peut être préparée des deux manières suivantes.

  • Dans le terminal, exécutez mysql -u root –p

  • Créez une nouvelle base de données via CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;

Step 2 - Configurer la connexion à la base de données dans le config/db.phpfichier. La configuration suivante correspond au système actuellement utilisé.

<?php
   return [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host=localhost;dbname=helloworld',
      'username' => 'vladimir',
      'password' => '12345',
      'charset' => 'utf8',
   ];
?>

Step 3 - Dans le dossier racine run ./yii migrate/create test_table. Cette commande créera une migration de base de données pour gérer notre base de données. Le fichier de migration doit apparaître dans lemigrations dossier de la racine du projet.

Step 4 - Modifier le fichier de migration (m160106_163154_test_table.php dans ce cas) de cette façon.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160106_163154_test_table extends Migration {
      public function safeUp() {
         $this->createTable("user", [ "id" => Schema::TYPE_PK, "name" => Schema::TYPE_STRING, "email" => Schema::TYPE_STRING, ]); $this->batchInsert("user", ["name", "email"], [
            ["User1", "[email protected]"],
            ["User2", "[email protected]"],
            ["User3", "[email protected]"],
            ["User4", "[email protected]"],
            ["User5", "[email protected]"],
            ["User6", "[email protected]"],
            ["User7", "[email protected]"],
            ["User8", "[email protected]"],
            ["User9", "[email protected]"],
            ["User10", "[email protected]"],
            ["User11", "[email protected]"],
         ]);
      }
      public function safeDown() {
         $this->dropTable('user');
      }
   }
?>

La migration ci-dessus crée un usertable avec ces champs: id, nom et e-mail. Il ajoute également quelques utilisateurs de démonstration.

Step 5 - À l'intérieur de la racine du projet run ./yii migrate pour appliquer la migration à la base de données.

Step 6 - Maintenant, nous devons créer un modèle pour notre usertable. Par souci de simplicité, nous allons utiliser leGiioutil de génération de code. Ouvrez ceciurl: http://localhost:8080/index.php?r=gii. Ensuite, cliquez sur le bouton «Démarrer» sous l'en-tête «Générateur de modèle». Remplissez le nom de la table («utilisateur») et la classe de modèle («Mon utilisateur»), cliquez sur le bouton «Aperçu» et enfin, cliquez sur le bouton «Générer».

Le modèle MyUser doit apparaître dans le répertoire des modèles.

Créer un événement

Supposons que nous souhaitons envoyer un e-mail à l'administrateur chaque fois qu'un nouvel utilisateur s'inscrit sur notre site Web.

Step 1 - Modifier le models/MyUser.php classer de cette façon.

<?php
   namespace app\models;
   use Yii;
   /**
   * This is the model class for table "user".
   *
   * @property integer $id
   * @property string $name * @property string $email
   */
   class MyUser extends \yii\db\ActiveRecord {
      const EVENT_NEW_USER = 'new-user';
      public function init() {
         // first parameter is the name of the event and second is the handler.
         $this->on(self::EVENT_NEW_USER, [$this, 'sendMailToAdmin']);
      }
      /**
      * @inheritdoc
      */
      public static function tableName() {
         return 'user';
      }
      /**
      * @inheritdoc
      */
      public function rules() {
         return [
            [['name', 'email'], 'string', 'max' => 255]
         ];
      }
      /**
      * @inheritdoc
      */
      public function attributeLabels() {
         return [
            'id' => 'ID',
            'name' => 'Name',
            'email' => 'Email',
         ];
      }
      public function sendMailToAdmin($event) {
         echo 'mail sent to admin using the event';
      }
   }
?>

Dans le code ci-dessus, nous définissons un événement «nouvel utilisateur». Ensuite, dans la méthode init (), nous attachons lesendMailToAdminfonction à l'événement «nouvel utilisateur». Maintenant, nous devons déclencher cet événement.

Step 2 - Créez une méthode appelée actionTestEvent dans le SiteController.

public function actionTestEvent() {
   $model = new MyUser();
   $model->name = "John"; $model->email = "[email protected]";
   if($model->save()) { $model->trigger(MyUser::EVENT_NEW_USER);
   }
}

Dans le code ci-dessus, nous créons un nouvel utilisateur et déclenchons l'événement «nouvel utilisateur».

Step 3 - Tapez maintenant http://localhost:8080/index.php?r=site/test-event, vous verrez ce qui suit.