方案一:如果模块儿较少,不用专门给模块儿目录定义别名,酱紫做就ok啦。
1、在项目根目录下面创建一个 modules 目录。
2、进入 gii : http://localhost/basic/web/index.php?r=gii
假如我现在需要生成一个 report 的模块儿,可以按如下填写:
然后将它提示生成的那一行 repost=>['class'=>'app\modules\report\Module'] 配置到 app\config\web.php的modules中就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'); } }
`