Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Yii2 中的模块modules

Yii2 中的模块modules

作者头像
友儿
发布于 2022-09-11 04:13:00
发布于 2022-09-11 04:13:00
1.2K00
代码可运行
举报
文章被收录于专栏:友儿友儿
运行总次数:0
代码可运行
模块概述 我们创建modules模块代码如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

namespace app\modules\admin;
use yii\web\AssetManager;

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

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

        // custom initialization code goes here
    } 
}

然后需要把模块ID添加到所属应用中,打开配置文件config/web.php,在modules对应的数组中添加元素’admin‘,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'modules'=>[
        'admin' => [
            'class' => 'app\modules\admin\Module',
        ],
    ],

访问:index.php?r=admin/default/index即可。

使用Gii创建模块

通过配置应用的yii\base\Application::modules属性开启它。通常来讲在config/wep.php文件中配置代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (YII_ENV_DEV) {
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];
}

这段配置表明,如果当前是开发环境,应用会包含gii模块,模块类是yii\gii\Module。通过URL访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://hostname/index.php?r=gii

点击Preview预览,最后点击Generate生成所有文件,请确保modules文件夹有可写的权限。

模块中资源文件

在admin目录创建images文件夹保存图片如下通过URL访问1.jpg,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://loaclhost/modules/admin/images/1.jpg

显然modules目录下的文件是不允许通过URL访问的。 在modules/admin下创建assets文件夹来包含资源文件 在调用AssetManager类的publish()方法,这个方法首先会在应用的asset文件夹下创建一个随机不冲突的文件夹如4ebd21cf,然后将模块的assets目录复制到4ebd21cf文件夹下让视图调用。 下面我们看一下代码实现: 我们在Module类中增加getAssetsUrl方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

namespace app\modules\admin;
use yii\web\AssetManager;

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

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

        // custom initialization code goes here
    }
    public function getAssetsUrl()
    {
        $assetManager = new AssetManager();
        return $assetManager->publish("@app/modules/admin/assets")[1];
    }
}

Publish()方法第一个参数$path是要发布的asssets目录保存的路径,这里使用别名“@app/modules/admin/assets”,指定保存assets目录为“/modules/admin/assets”。

提示

  1. @yii: BashYii.php 文件所在的目录(也被成为框架安装目录)\vendor\yiisoft\yii2
  2. @app:当前运行的应用所在目录。
  3. runtime:指定运行的应用的yii\base\Application:runtimePath。默认@app/runtime。
  4. webroot:指向包含入口文件的目录/web。
  5. vendor: 指定包含yii\base\Application:vendorPath。默认@app/vendor。

言归正传: 在视图文件中modules/admin/views/default/index.php 获取图片路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>modules-admin-views-index</div>
<img src="<?=$this->context->module->assetsUrl;?>/images/1.jpg" style="width: 50%;height: 50%">

说明:“this->context”表示所在控制器实例对象,“modules”表示该控制器所属的模块,这里表示modules/admin目录下的模块类Module的实例对象,该对象调用不存在的属性“assetUrl”的时候,就会通过魔术方法_get(),调用moduels/admin/Module类的“getAssetsUrl()”方法。以上代码在浏览器中显示的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>modules-admin-views-index</div>
<img src="/assets/4ebd21cf/images/1.jpg" style="width: 50%;height: 50%">

在调用publish()方法的过程中,在应用目录下随机创建了“4ebd21cf”文件夹,并把/modules/admin/assets目录下的文件复制过去,这样在视图中实际访问的就是应用目录“4ebd21cf”下的资源文件。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Yii2用Gii自动生成Module+Model+CRUD
URL:http://localhost/项目目录/backend/index.php/gii
botkenni
2019/09/03
4.7K0
Yii2用Gii自动生成Module+Model+CRUD
Yii2.0 RESTful API 之版本控制
之前我写过两篇关于 Yii2.0 RESTful API 如何搭建,以及 认证 等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现。
hedeqiang
2019/12/17
1.2K0
Yii2 源码分析 - 入口文件执行流程
以 yii 2.0.14 高级版的 frontend 为例,从 frontend/web/index.php 开始
botkenni
2019/09/02
1.3K0
Yii2 源码分析 - 入口文件执行流程
yii2 restful 风格搭建(一)
最近在研究 yii2 如何搭建 restful api,将心得写下,欢迎一起讨论 使用yii2.0.13 advanced 版,将 frontend 整个作为 api 接口项目,除了接口的路由规则可以认证通过外,其他的路由规则都返回请求错误的格式
botkenni
2019/09/02
1.4K0
从配置文件的角度去了解Yii2
Yii2是一个奇特的框架,其牺牲了现在盛行的解耦设计,用一个高度耦合的结构提供给开发者一个方便的几类抽象,Application,Module,Component,甚至是ServiceLocator.想让对象具备哪类特征就直接继承相应的对象,想要改变他就去复写父类的方法,虽然不符合开放封闭原则,单一职责原则,李氏替换原则等面向对象设计原则,但的确很方便.
botkenni
2019/09/02
1.6K0
调通yii2 curd接口(RESTful Web风格)进行开发(高级版本)
第一:虚拟域名,看我博客,就知道啦.美化url也是啦 第一步: 把backend复制一份,改名为api. 第二步: 在common/config/bootstrap.php下粘贴下面这个代码.
贵哥的编程之路
2022/03/25
2470
调通yii2 curd接口(RESTful Web风格)进行开发(高级版本)
YII2框架访问gii、debug页面404的错误解决方法
之前在介绍Yii框架的时候就说过 Yii 支持 gii 功能, gii 去自动生成 Web 站点常用功能的代码,也就是我们经常说的 CURD 操作,增删改查。使用 gii 生成代码也是非常的简单,Gii 被设计成高度可定制和可扩展的代码生成工具, 使用它可以大幅提高应用开发速度
沈唁
2018/07/25
1.9K0
YII2框架访问gii、debug页面404的错误解决方法
The file or directory to be published does not exist: /var/www/yii-demo/vendor/yiisoft/yii2/gii/asse
报错内容 Invalid Argument – yii\base\InvalidArgumentException The file or directory to be published does not exist: /var/www/yii-demo/vendor/yiisoft/yii2/gii/assets 这错报的莫名其秒 我的目录结构 ├── api │   ├── config │   │   ├── bootstrap.php │   │   ├── main.php │   │  
崔哥
2022/09/26
4670
yii2 扩展和自定义(函数 , 组件 , 模块)
自定义辅助函数 入口文件加载 目录下创建一个helpers目录下创建functions.php 文件 <?php if (! function_exists('hello')) { f
botkenni
2019/09/02
1.1K0
yii2底层源码分析 [ 2.0 版本 ]
我是从入口处分析的。 $mysiteRoot/frontend 首先:$mysiteRoot/frontend/index.php
botkenni
2019/09/02
9200
Yii2使用gii生成代码
gii可谓是Yii2中一个神奇的扩展,可以快速帮你生成Model类、CRUD、Module模块、Form表单等,可以在开发上节约很大的时间。
Petrochor
2022/06/07
5520
Yii2使用gii生成代码
Yii2 速查表
Yii的数据库读取对象,在PDO之上,DAO后有了Query Builder和AR
双面人
2019/06/25
1.9K0
Yii2.0 RESTful API 基础配置教程
这是安装Yii2.0的首选方法。如果你还没有安装 Composer,你可以按照这里的说明进行安装。
hedeqiang
2019/12/17
1.1K0
yii2开发后记
基础总结 1.修改默认控制器/方法 yii默认是site控制器,可以在web.php中设置$config中的'defaultRoute'='xxxx';使用自定义默认的控制器。也可以改写Yii::$a
枕边书
2018/01/04
3.5K0
Yii2.0 RESTful API快速搭建教程
这是安装Yii2.0的首选方法。如果你还没有安装 Composer,你可以按照这里的说明进行安装。
botkenni
2019/09/02
1.3K0
yii2调通接口后,咱们来做个表单接口(修改版本)
然后gii生成到common/models下. 第一:虚拟域名,看我博客,就知道啦.美化url也是啦 第一步: 把backend复制一份,改名为api. 第二步: 在common/config/bootstrap.php下粘贴下面这个代码.
贵哥的编程之路
2022/03/25
2660
yii2调通接口后,咱们来做个表单接口(修改版本)
Ubuntu 安装yii2 advanced版 遇到的坑
https://www.yiichina.com/doc/guide/2.0/start-installation 通过 Composer 安装
悟空聊架构
2018/10/10
9300
Yii2 使用 RESTful 写API接口 实例
其实 Yii2 框架本身就对 RESTful 是友好支持的,具体可以看官方文档(http://www.yiichina.com/doc/guide/2.0/rest-quick-start),或者去看源码,都是可以的
botkenni
2019/09/02
2.4K0
Yii2 使用 RESTful 写API接口 实例
yii2开发中19条推荐实践
这个是做yii2开发的基石,除非没有办法使用,否则请不要放弃,除了更容易的安装yii2及第三方扩展外,能使用Composer代表着你的服务器最少能运行起来php-cli,那么你就可以使用yii命令行,它会为你的开发带来无尽的遍历。
阿北
2018/06/02
3.5K0
yii2开发中19条推荐实践
yii2进行接口开发,比较优化的curd接口(提供sql)全方位提供
第一:虚拟域名,看我博客,就知道啦.美化url也是啦(必须进行url美化+虚拟域名才能使用啊啊啊) 第一步: 把backend复制一份,改名为api. 第二步: 在common/config/bootstrap.php下粘贴下面这个代码.
贵哥的编程之路
2022/05/06
4870
yii2进行接口开发,比较优化的curd接口(提供sql)全方位提供
相关推荐
Yii2用Gii自动生成Module+Model+CRUD
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验