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 или управление блогами, могут быть разработаны в виде модулей, чтобы вы могли легко повторно использовать их в будущих проектах.