Yii - Módulos
Un módulo es una entidad que tiene sus propios modelos, vistas, controladores y posiblemente otros módulos. Es prácticamente una aplicación dentro de la aplicación.
Step 1 - Crea una carpeta llamada modulesdentro de la raíz de su proyecto. Dentro de la carpeta de módulos, cree una carpeta llamadahello. Esta será la carpeta básica de nuestro módulo Hello.
Step 2 - Dentro del hello carpeta, crea un archivo Hello.php con el siguiente código.
<?php
namespace app\modules\hello;
class Hello extends \yii\base\Module {
public function init() {
parent::init();
}
}
?>
Acabamos de crear una clase de módulo. Debe ubicarse debajo de la ruta de la base del módulo. Cada vez que se accede a un módulo, se crea una instancia de la clase de módulo correspondiente. losinit() La función es para inicializar las propiedades del módulo.
Step 3- Ahora, agregue dos directorios más dentro de la carpeta hello: controladores y vistas. Agrega unCustomController.php archivo a la carpeta del controlador.
<?php
namespace app\modules\hello\controllers;
use yii\web\Controller;
class CustomController extends Controller {
public function actionGreet() {
return $this->render('greet');
}
}
?>
Al crear un módulo, una convención es colocar las clases de controlador en el directorio del controlador de la ruta base del módulo. Acabamos de definir elactionGreet función, que solo devuelve un greet ver.
Las vistas del módulo deben colocarse en la carpeta de vistas de la ruta base del módulo. Si las vistas son renderizadas por un controlador, deben ubicarse en la carpeta correspondiente a lacontrollerID. Añadircustom carpeta a la views carpeta.
Step 4 - Dentro del directorio personalizado, cree un archivo llamado greet.php con el siguiente código.
<h1>Hello world from custom module!</h1>
Acabamos de crear un View para nuestro actionGreet. Para utilizar este módulo recién creado, debemos configurar la aplicación. Debemos agregar nuestro módulo a la propiedad de módulos de la aplicación.
Step 5 - Modificar el config/web.php archivo.
<?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;
?>
Una ruta para el controlador de un módulo debe comenzar con el ID del módulo seguido del ID del controlador y el ID de la acción.
Step 6 - Para ejecutar el actionGreet en nuestra aplicación, debemos usar la siguiente ruta.
hello/custom/greet
Donde hola es un ID de módulo, personalizado es un controller ID y saludar es un action ID.
Step 7 - Ahora, escriba http://localhost:8080/index.php?r=hello/custom/greet y verá el siguiente resultado.
Puntos importantes
Los módulos deben -
Se utiliza en grandes aplicaciones. Debe dividir sus características en varios grupos. Cada grupo de funciones se puede desarrollar como un módulo.
Sea reutilizable. Algunas funciones de uso común, como la gestión de SEO o la gestión de blogs, se pueden desarrollar como módulos, para que puedas reutilizarlas fácilmente en proyectos futuros.