yii扩展性
- 模块化
- 事件机制
- mixin(混合、多重继承)
- 依赖注入
模块化
访问Gii创建模块
http://127.0.0.1/Yii/yii2-demo/web/index.php?r=gii
创建一级模块article
,如下所示:
生成模块后,需要在config\web.php中配置模块参考
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'modules' => [
'article' => [
'class' => 'app\modules\article\article',//上图提示参数粘贴到web.php
],
],
一级模块访问:
第一种:需要通过在controller中的文件访问子模块
class GiilearnController extends Controller
{
/**
* 1)
* http://127.0.0.1/Yii/yii2-demo/web/index.php?r=giilearn/index
* 访问上述地址即可到达子模块
* 2)直接访问子模块
* http://127.0.0.1/Yii/yii2-demo/web/index.php?r=article/default/index
*/
public function actionIndex()
{
//获取子模块,读取的是子模块的ID,子模块需要在config\web.php中配置
$article = \Yii::$app ->getModule('article');
//调用子模块的操作
$article ->runAction('default/index');
}
}
第一种:直接访问子模块
http://127.0.0.1/Yii/yii2-demo/web/index.php?r=article/default/index
创建二级模块category
此模块创建于article模块下,即为article的子模块,如下所示
子模块下的子模块的配置信息最好写在上一级模块生成的模块id的php文件中,比如例子所示的分类模块(子模块下的子模块的配置信息最好写在上一级模块生成的模块id的php文件中,比如例子所示的分类模块的父模块是article,此时把分类模块的配置写在article.php就好)的父模块是Article,此时配置Article.php就好
<?php
namespace app\modules\article;
class article extends \yii\base\Module
{
public $controllerNamespace = 'app\modules\article\controllers';
public function init()
{
parent::init();
//在父模块中配置子模块http://127.0.0.1/Yii/yii2-demo/web/index.php?r=article/category/default/index
$this->modules = [
'category' => [
'class' => 'app\modules\article\modules\category\category',
],
];
// custom initialization code goes here
}
}
生成的文件结构为: