欢迎来到曹鸿源的个人站点
希望我们可以相互学习,谢谢!^o^

       

Yii2.0 模块创建,以及模块文件不依赖于主项目的方法

 2019-10-15 00:18:04   {{zan}}   0   135 

本文主要记录 Yii2.0 (基本)框架中模块(modules)的创建,以及模块文件可脱离主项目存在的方法。

下面开始讲道理,想直接看文档的可以直接移步至:https://www.yiichina.com/doc/guide/2.0/structure-modules

正常根据官方教程创建的模块文件是在主项目的 modules 文件夹下的,这样会有许多不便:比如模块变多,项目整体代码量变大,而且模块文件也不可以共享其他项目,比如登录支付等。

模块脱离主项目存在的优点:

  1. 易维护,可以单独开发;

  2. 不会影响主项目的代码量;

  3. 可以被其他项目共享;

下面先简单说下 modules 的创建:

  1. 使用 Yii2.0 的 Gii 创建(推荐);

  2. 手动创建;

第一种方式:

也是我推荐的方法,那就是使用 Yii2.0 框架的 Gii 类去创建:

假设你已经安装好了 Yii2.0 框架,并且可以正常方式首页,再假设你配置了访问别称如:www.yii2.com。那么往下看:

①访问www.yii2.com/gii,找到如下图所示,然后点击 start :

image.png

② 假设你新建一个admin模块,那么第一个输入框输入Module的class,要写完整的路径,如:app\modules\admin\Module;第二个输入框输入Module的id,就是你的admin,如:admin;如下图所示:

image.png

③点击 Preview,然后会出现如下图所示,然后点击 Generate

image.png

④点击 Generate 后会出现如下图所示,然后打开你的项目,把框里的代码复制至你主项目的 config/web.php 文件的 $config 数组中。

image.png

⑤以上操作都做完了后,访问页面 www.yii2.com/admin 会出现如下页面,那么证明你创建成功了:

image.png

第二种方式:

当然你嫌弃麻烦也直接在主项目中手动创建文件:

image.png

如官方教程给的,根据上图创建文件,然后后做下面配置:

Module.php 文件内容:

namespace app\modules\forum;

class Module extends \yii\base\Module
{
    /**
     * @inheritdoc
     */
    public $controllerNamespace = 'app\modules\forum\controllers';

    /**
     * @inheritdoc
     */
    public function init()
    {
        parent::init();
    }
}

主项目 config/web.php 中添加:

'modules' => [
    'forum' => [
        'class' => 'app\modules\forum\Module',
    ],
],

访问 www.yii2.com/forum/default/index 即可。


好了上面就是创建 modules 的教程,下面就是本文的重点:把模块文件脱离主项目使用。

假设把模块文件放置于主项目同级目录,可以理解那么继续:

①我们继续上面的项目,保证可以正常访问;

②在项目上面的同级目录创建文件:

test\modules\test\Module.php

<?php
/**
 * @author: Cao Hongyuan <cao.hongyuan@qq.com>
 */
namespace test\modules\test;

use Yii;
class Module extends \yii\base\Module
{
    /**
     * @inheritdoc
     */
    public $controllerNamespace = 'test\modules\test\controllers';

    /**
     * @inheritdoc
     */
    public function init()
    {
        parent::init();

        // custom initialization code goes here
    }
}

test\modules\test\controllers\DefaultController.php

<?php
/**
 * @author: Cao Hongyuan <cao.hongyuan@qq.com>
 */

namespace test\modules\test\controllers;

use yii\web\Controller;

class DefaultController extends Controller
{
    public function actionIndex()
    {
        return $this->renderPartial('index');
    }
}

test\modules\test\views\default\index.php

<?php
/**
 * @author: Cao Hongyuan <cao.hongyuan@qq.com>
 */
?>
this is test module

最后,也是非常重要的一步:把主项目的 vendor 的文件拷贝至 test\modules\test

好了,现在模块完成了,下面配置主项目信息,如下图:

image.png

①在主项目的 config/web.php 的 $config 数组中的 aliases 数组(如没有 aliases 可以自己写)中添加:

'aliases' => [
    '@test' => __DIR__.'/../../test/',
],

这是给 test 加别称,好让主项目可以找到和主项目同级的模块文件。

②在数组 modules 中加入:

'test' => [
    'class' => 'test\modules\test\Module',
],

保存后访问 www.yii2.com/test 可以看到如下:

image.png

完毕,配置成功!


注意:模块移出来后 Module 和控制器以及模型中的命名空间的开头都为 test,要和主项目中的别称 @test 的名称一致,比如控制的命名空间为如:

test\modules\test\controllers


好了,假如有问题可以留言回复,也可以直接邮箱联系我!


本文链接地址,转载请标注:https://caohongyuan.cn/article/130

(邮箱不会公开,只会做回复通知用) 提交 清空 {{comment.content}}
Re:{{response.content}}