方案一:如果模塊兒較少,不用專門給模塊兒目錄定義別名,醬紫做就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'); } }
`