yii2 创建模块modules

方案一:如果模块儿较少,不用专门给模块儿目录定义别名,酱紫做就ok啦。

1、在项目根目录下面创建一个 modules 目录。

2、进入 gii : http://localhost/basic/web/index.php?r=gii

假如我现在需要生成一个 report 的模块儿,可以按如下填写:

yii2 创建模块modules

然后将它提示生成的那一行 repost=>['class'=>'app\modules\report\Module'] 配置到 app\config\web.phpmodules中就ok啦。

如果需要访问的话,路由为:http://localhost/basic/web/index.php?r=report/default/index

report 为模块儿名,default为控制器名,index为方法名

方案二:如果模块儿很多,建意给每个模块儿单独定义一个别名,

此处的别名定义是要在预加载的时候就定义好,可不是在 app\config\web.php的 aliases=>[ ] 中定义的哦

方法:1、我们可以先创建一个 common 目录,在 common中创建一个 bootstrap.php 文件,当然也可以自定义。

2、在 common\bootstrap.php 中添加如下别名:

Yii::setAlias('report', dirname(__DIR__) . '/modules/report'); 

// 看清楚哦,上面的别名定义可是没有 @ 符号的哦,因为我们要把它当成模块儿的根目录,模块其实也是一个独立的软件单元,它包含 模型, 视图, 控制器 和其他支持的组件。 在许多方面上,模块看起来像一个 应用,所以我们可以把它暂时看成一个应用

3、在 入口文件 index.php 中添加一行:

defined('YII_DEBUG') or define('YII_DEBUG', true);  //标识应用是否应用在调试模式
defined('YII_ENV') or define('YII_ENV', 'dev'); // 标识应用运行的环境
require(__DIR__ . '/../vendor/autoload.php'); // 注册 composer 自动加载器
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); // 包含 Yii 类文件 require(__DIR__ . '/../common/bootstrap.php');//这就是我们自己添加的文件了 $config = require(__DIR__ . '/../config/web.php'); // 加载应用配置

把它放到入口文件中,系统启动时就会被加载,那么此时 report 就相于  $_SERVER['DOCUMENT_ROOT']\modules\report 的路径啦,模块儿中的命名空间都可以以 report开头

例如,此时的 modules\report\Module.php 的命名空间就是 namespace report

<?php

namespace report;

/**
* report module definition class
*/
class Module extends \yii\base\Module
{
/**
* @inheritdoc
*/
public $controllerNamespace = 'report\controllers'; /**
* @inheritdoc
*/
public function init()
{
parent::init(); // custom initialization code goes here
}
}

控制的 命名空间也是 namespace report\controllers

namespace report\controllers;

use yii\web\Controller;

/**
* Default controller for the `report` module
*/
class DefaultController extends Controller
{
/**
* Renders the index view for the module
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
}

`

上一篇:C#的扩展方法解析


下一篇:Problem - D - Codeforces Fix a Tree