Yii - Modules

Un module est une entité qui possède ses propres modèles, vues, contrôleurs et éventuellement d'autres modules. C'est pratiquement une application à l'intérieur de l'application.

Step 1 - Créez un dossier appelé modulesà l'intérieur de la racine de votre projet. Dans le dossier modules, créez un dossier nomméhello. Ce sera le dossier de base de notre module Hello.

Step 2 - À l'intérieur du hello dossier, créer un fichier Hello.php avec le code suivant.

<?php
   namespace app\modules\hello;
   class Hello extends \yii\base\Module {
      public function init() {
         parent::init();
      }
   }
?>

Nous venons de créer une classe de module. Celui-ci doit être situé sous le chemin de base du module. A chaque accès à un module, une instance de la classe de module correspondante est créée. leinit() est pour initialiser les propriétés du module.

Step 3- Maintenant, ajoutez deux autres répertoires dans le dossier hello - contrôleurs et vues. Ajouter unCustomController.php fichier dans le dossier du contrôleur.

<?php
   namespace app\modules\hello\controllers;
   use yii\web\Controller;
   class CustomController extends Controller {
      public function actionGreet() {
         return $this->render('greet');
      }
   }
?>

Lors de la création d'un module, une convention consiste à placer les classes du contrôleur dans le répertoire du contrôleur du chemin de base du module. Nous venons de définir leactionGreet fonction, qui renvoie juste un greet vue.

Les vues du module doivent être placées dans le dossier views du chemin de base du module. Si les vues sont rendues par un contrôleur, elles doivent se trouver dans le dossier correspondant aucontrollerID. Ajoutercustom dossier vers le views dossier.

Step 4 - Dans le répertoire personnalisé, créez un fichier appelé greet.php avec le code suivant.

<h1>Hello world from custom module!</h1>

Nous venons de créer un View pour notre actionGreet. Pour utiliser ce module nouvellement créé, nous devons configurer l'application. Nous devons ajouter notre module à la propriété modules de l'application.

Step 5 - Modifier le config/web.php fichier.

<?php
   $params = require(__DIR__ . '/params.php');
   $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is //required by cookie validation 'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), ], 'modules' => [ 'hello' => [ 'class' => 'app\modules\hello\Hello', ], ], 'params' => $params,
   ];
   if (YII_ENV_DEV) {
      // configuration adjustments for 'dev' environment
      $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [
         'class' => 'yii\debug\Module',
      ];
      $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [
         'class' => 'yii\gii\Module',
      ];
   }
   return $config;
?>

Une route pour le contrôleur d'un module doit commencer par l'ID du module suivi de l'ID du contrôleur et de l'ID d'action.

Step 6 - Pour exécuter le actionGreet dans notre application, nous devrions utiliser la route suivante.

hello/custom/greet

Où bonjour est un ID de module, personnalisé est un controller ID et saluer est un action ID.

Step 7 - Maintenant, tapez http://localhost:8080/index.php?r=hello/custom/greet et vous verrez la sortie suivante.

Les points importants

Les modules doivent -

  • Être utilisé dans de grandes applications. Vous devez diviser ses fonctionnalités en plusieurs groupes. Chaque groupe de fonctionnalités peut être développé sous forme de module.

  • Soyez réutilisable. Certaines fonctionnalités couramment utilisées, comme la gestion du référencement ou la gestion de blogs, peuvent être développées sous forme de modules, afin que vous puissiez facilement les réutiliser dans de futurs projets.