Yii - Módulos
Um módulo é uma entidade que possui seus próprios modelos, visualizações, controladores e possivelmente outros módulos. É praticamente um aplicativo dentro do aplicativo.
Step 1 - Crie uma pasta chamada modulesdentro da raiz do seu projeto. Dentro da pasta de módulos, crie uma pasta chamadahello. Esta será a pasta básica para nosso módulo Hello.
Step 2 - Dentro do hello pasta, crie um arquivo Hello.php com o seguinte código.
<?php
namespace app\modules\hello;
class Hello extends \yii\base\Module {
public function init() {
parent::init();
}
}
?>
Acabamos de criar uma classe de módulo. Ele deve estar localizado sob o caminho da base do módulo. Cada vez que um módulo é acessado, uma instância da classe do módulo correspondente é criada. oinit() função é para inicializar as propriedades do módulo.
Step 3- Agora, adicione mais dois diretórios dentro da pasta hello - controladores e visualizações. Adicione umCustomController.php arquivo para a pasta do controlador.
<?php
namespace app\modules\hello\controllers;
use yii\web\Controller;
class CustomController extends Controller {
public function actionGreet() {
return $this->render('greet');
}
}
?>
Ao criar um módulo, uma convenção é colocar as classes do controlador no diretório do controlador do caminho base do módulo. Acabamos de definir oactionGreet função, que apenas retorna um greet Visão.
As visualizações no módulo devem ser colocadas na pasta de visualizações do caminho base do módulo. Se as visualizações forem renderizadas por um controlador, elas devem estar localizadas na pasta correspondente aocontrollerID. Adicionarcustom pasta para o views pasta.
Step 4 - Dentro do diretório personalizado, crie um arquivo chamado greet.php com o seguinte código.
<h1>Hello world from custom module!</h1>
Acabamos de criar um View para nós actionGreet. Para usar este módulo recém-criado, devemos configurar o aplicativo. Devemos adicionar nosso módulo à propriedade modules do aplicativo.
Step 5 - Modifique o config/web.php Arquivo.
<?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;
?>
Uma rota para o controlador de um módulo deve começar com o ID do módulo seguido pelo ID do controlador e ID da ação.
Step 6 - Para executar o actionGreet em nossa aplicação, devemos usar a seguinte rota.
hello/custom/greet
Onde hello é um ID de módulo, custom é um controller ID e saudar é um action ID.
Step 7 - Agora digite http://localhost:8080/index.php?r=hello/custom/greet e você verá a seguinte saída.
Pontos importantes
Módulos devem -
Ser usado em grandes aplicações. Você deve dividir seus recursos em vários grupos. Cada grupo de recursos pode ser desenvolvido como um módulo.
Seja reutilizável. Alguns recursos comumente usados, como gerenciamento de SEO ou gerenciamento de blog, podem ser desenvolvidos como módulos, para que você possa reutilizá-los facilmente em projetos futuros.