Yii - Модули

Модуль - это объект, который имеет свои собственные модели, представления, контроллеры и, возможно, другие модули. Это практически приложение внутри приложения.

Step 1 - Создайте папку с названием modulesвнутри корня вашего проекта. Внутри папки модулей создайте папку с именемhello. Это будет основная папка для нашего модуля Hello.

Step 2 - Внутри hello папку, создайте файл Hello.php со следующим кодом.

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

Мы только что создали класс модуля. Он должен находиться под базовым путем к модулю. Каждый раз, когда осуществляется доступ к модулю, создается экземпляр соответствующего класса модуля. Вinit() функция предназначена для инициализации свойств модуля.

Step 3- Теперь добавьте еще два каталога в папку hello - контроллеры и представления. ДобавитьCustomController.php файл в папку контроллера.

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

При создании модуля принято помещать классы контроллера в каталог контроллера базового пути модуля. Мы только что определилиactionGreet функция, которая просто возвращает greet Посмотреть.

Представления в модуле должны быть помещены в папку представлений базового пути модуля. Если представления визуализируются контроллером, они должны находиться в папке, соответствующейcontrollerID. Добавитьcustom папку в views папка.

Step 4 - Внутри пользовательского каталога создайте файл с именем greet.php со следующим кодом.

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

Мы только что создали View для нашего actionGreet. Чтобы использовать этот недавно созданный модуль, мы должны настроить приложение. Мы должны добавить наш модуль в свойство modules приложения.

Step 5 - Измените config/web.php файл.

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

Маршрут для контроллера модуля должен начинаться с идентификатора модуля, за которым следует идентификатор контроллера и идентификатор действия.

Step 6 - Для запуска actionGreet в нашем приложении мы должны использовать следующий маршрут.

hello/custom/greet

Где hello - это идентификатор модуля, custom - это controller ID и приветствовать action ID.

Step 7 - Теперь введите http://localhost:8080/index.php?r=hello/custom/greet и вы увидите следующий результат.

Важные точки

Модули должны -

  • Используется в больших приложениях. Вам следует разделить его особенности на несколько групп. Каждую группу функций можно разработать как модуль.

  • Быть многоразовым. Некоторые часто используемые функции, такие как управление SEO или управление блогами, могут быть разработаны в виде модулей, чтобы вы могли легко повторно использовать их в будущих проектах.