Yii 模块化

Yii 模块化

其实 Yii 程序就是一个模块,最外层的控制器,模型,视图,配置文件就是一个大模块,我们可以创建许多小模块去细分逻辑问题。

例子:

  1. 假如我们创建一个博客,我们可以创建文章模块,用户管理模块,等等
  2. 如果用户管理逻辑太复杂,我们还可以细分头像模块,密码模块
  3. 如果当密码模块有 bug,你选择禁用,你可以在当前目录放置配置文件来控制是否启用子模块。

用 gii 创建模块,假如 Post 模块

  1. 创建模块
    // Modules Class 使用命名空间+类名
    app\modules\post\Post
    // Module ID 使用类名就行
    Post
    // 这样会生成如下目录
    ···
    -modules
    -post
        -controllers
        -views
        -models
        -Post.php   // 相当于这个模块的配置文件
    ···
  2. 把创建好的模块加入 web.php 配置文件运行
    'modules' => [
    'article' => [
        'class' => 'app\modules\post\Post'
    ],
    ],
  3. 当然项目是 MVC 的,你还需要为模块生成数据模型(Model),可通过 gii

怎么去调用模块?

  1. 通过父模块调用,比如,在 Site 控制器

    public function actionIndex()
    {
    // 获取子模块,根据模块 id
    $post = \YII::$app->getModule('post');
    
    // 调用子模块的操作,调用 post 模块 default 控制器的 index 操作
    $post->runAction('default/index');
    }
  2. 通过浏览器访问
    localhost/basic/web/index.php?r=post/default/index

再细分模块

  1. 我们想给文章模块细分一个分类模块
    // Modules Class 使用命名空间+类名
    app\modules\post\modules\category\Category
    // Module ID 使用类名就行
    category
  2. 调用这个子分类模块,在父模块 post 中调用,首先在 post.php 中进行配置。
    public function init()
    {
    parent::init();
    $this->modules = [
        'category' => [ // 此处是模块 id
            'class' => 'app\modules\post\modules\category\Category',
        ],
    ];
    }
  3. 访问子模块
    -可以通过上面的父模块调用子模块方法
    -通过浏览器调用
    -父模块\子模块\控制器\操作
    loclahost\basic\web\post\category\default\index

发表评论