Yii - Module

Ein Modul ist eine Entität mit eigenen Modellen, Ansichten, Controllern und möglicherweise anderen Modulen. Es ist praktisch eine Anwendung innerhalb der Anwendung.

Step 1 - Erstellen Sie einen Ordner namens modulesin Ihrem Projektstamm. Erstellen Sie im Modulordner einen Ordner mit dem Namenhello. Dies ist der Basisordner für unser Hello-Modul.

Step 2 - In der hello Ordner, erstellen Sie eine Datei Hello.php mit dem folgenden Code.

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

Wir haben gerade eine Modulklasse erstellt. Dies sollte sich unter dem Basispfad des Moduls befinden. Bei jedem Zugriff auf ein Modul wird eine Instanz der entsprechenden Modulklasse erstellt. Dasinit() Funktion dient zum Initialisieren der Moduleigenschaften.

Step 3- Fügen Sie jetzt zwei weitere Verzeichnisse in den Hallo-Ordner ein - Controller und Ansichten. Füge hinzu einCustomController.php Datei in den Ordner des Controllers.

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

Beim Erstellen eines Moduls werden die Controller-Klassen im Verzeichnis des Controllers im Basispfad des Moduls abgelegt. Wir haben gerade die definiertactionGreet Funktion, die nur a zurückgibt greet Aussicht.

Ansichten im Modul sollten im Ansichtsordner des Basispfads des Moduls abgelegt werden. Wenn Ansichten von einem Controller gerendert werden, sollten sie sich in dem Ordner befinden, der dem entsprichtcontrollerID. Hinzufügencustom Ordner zum views Mappe.

Step 4 - Erstellen Sie im benutzerdefinierten Verzeichnis eine Datei mit dem Namen greet.php mit dem folgenden Code.

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

Wir haben gerade eine erstellt View für unser actionGreet. Um dieses neu erstellte Modul zu verwenden, müssen wir die Anwendung konfigurieren. Wir sollten unser Modul zur Moduleigenschaft der Anwendung hinzufügen.

Step 5 - Ändern Sie die config/web.php Datei.

<?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;
?>

Eine Route für den Controller eines Moduls muss mit der Modul-ID beginnen, gefolgt von der Controller-ID und der Aktions-ID.

Step 6 - Um die actionGreet In unserer Anwendung sollten wir die folgende Route verwenden.

hello/custom/greet

Wo Hallo eine Modul-ID ist, ist Benutzerdefiniert eine controller ID und grüße ist ein action ID.

Step 7 - Geben Sie jetzt ein http://localhost:8080/index.php?r=hello/custom/greet und Sie sehen die folgende Ausgabe.

Wichtige Punkte

Module sollten -

  • Wird in großen Anwendungen verwendet. Sie sollten die Funktionen in mehrere Gruppen unterteilen. Jede Feature-Gruppe kann als Modul entwickelt werden.

  • Wiederverwendbar sein. Einige häufig verwendete Funktionen wie SEO-Management oder Blog-Management können als Module entwickelt werden, sodass Sie sie problemlos in zukünftigen Projekten wiederverwenden können.