在Yii2 中模块是能够无限级嵌套的,也就是说,模块能够包含另外一个包含模块的模块,咱们称前者为父模块,后者为子模块, 子模块必须在父模块的yiibaseModule::modules属性中申明,例如:
在Yii2的advanced版本的rest-api下创建嵌套模块,在forum模块(父模块)下嵌入admin模块(子模块)
api下的modules的文件结构以下php
--api ----modules ------forum(父模块) --------Module.php --------controllers --------models --------admin(子模块) ----------Module.php ----------models ----------controllers
forum下的Module.php须要修改init方法api
namespace api\modules\forum; class Module extends \yii\base\Module { public $controllerNamespace = 'api\modules\forum\controllers'; public function init() { parent::init(); $this->modules = [ 'admin' => [ // 此处应考虑使用一个更短的命名空间 'class' => 'api\modules\forum\admin\Module', ], ]; } }
admin下的Module.phpyii
namespace api\modules\forum\admin; class Module extends \yii\base\Module { public $controllerNamespace = 'api\modules\forum\admin\controllers'; public function init() { parent::init(); // \Yii::configure($this, require(__DIR__ . '/config.php')); } }
在嵌套模块中的控制器,它的路由应包含它全部祖先模块的ID,例如forum/admin/default/index 表明 在模块forum中子模块admin中default控制器的index操做。ide