hebo5485 2017-09-26 17:41:17 5152次浏览 0条评论 1 0 0

最近接到一个任务,用模块化的思想开发官网.开始的时候理解错误,直接建了一个项目出来,后来在网上看了教程,根据我的理解,做了个demo出来:

1.创建模块.根据文档,可以使用yii2自带的gii生成器来完成.例如我要生成一个名为’demo’的模块:
第一张

点击预览可以看到将要生成的内容:
预览代码

点击生成,成功之后会出现如下提示:
提示

2.配置模块
根据提示,我们需要在你将要使用该模块的项目下的配置文件里稍微配置一下,这里以frontend应用为例,需要在frontend/config/main.php中去修改:

增加如下配置:

'modules' => [
        ......
        'demo' => [
            'class' => 'demo\DemoModule',
        ],
        ......
    ],
    'aliases' => 
        ......
        'demo' => '@frontend/modules/demo',
        ......
    ],

gii在生成模块时会默认生成如下结构:
模块结构

默认生成default控制器

这时可以很容易访问到default控制器的index方法:
frontend项目地址/demo/default/index:
效果展示

3.加载模块内的静态资源

现在我想要把一个官方网站集成在这个模块中,这时该如何去调用静态资源呢?
我用的是这样的方法:

模块可以看做是一个单独的应用(application),在里面同样也是MVC结构,gii已经生成了controllers文件夹和views文件夹,可以根据实际需求去决定是否创建model等.

接下我在views中创建layouts文件夹(布局),这样在渲染视图时公共的部分就放在这里,并且使用render(不使用布局渲染时用renderAjax),在其中创建一个名为main的PHP文件,并在其中写入公共部分的视图代码,在页面代码之前加上这样一行代码:

list(,$url) = Yii::$app->assetManager->publish('@demo/web/static');

在页面中需要使用css/js等的时候使用这个$url就可以正确的渲染页面了,例如:

    ......
    <link rel="stylesheet" type="text/css" href="<?=Url::to($url.'/css/main.css')?>">
    <img src="<?=Url::to($url.'/images/logo.png')?>" />
    ......

这样做了之后,在访问 frontend项目地址/demo/控制器/方法 时,yii2会将你在页面中调用的静态资源复制生成到frontend/ assets/下,像这种形式:
生成的静态资源结构

到这里为止,一个简单的demo完成,复制到其他项目下,只需完成上面第2步的配置即可.

很惭愧,就写了一些微小的代码,谢谢!

    没有找到数据。
您需要登录后才可以评论。登录 | 立即注册