Yii2扩展开发与代码复用:以资源包为例

Yii2是目前最流行的PHP开发框架之一,具有简洁优雅、脉络清晰、开放融合、易于扩展、开发高效等等特点。

在使用Yii2 Framework开发项目的过程中,必然会遇到很多复用代码或公共代码的管理问题,例如在backend和frontend都会用到的Css样式资源、Js脚本资源、图片资源、自定义的扩展组件等等。为了便于维护这些代码的版本,且能同时在backend、frontend以及其他子系统中调用,使用Yii2的扩展是非常好的选择。

这里分别以资源和小部件为例进行说明,本文不详细介绍扩展Composer的编写和配置,如需了这部分内容,可参考《The Definitive Guide to Yii 2.0》的3.12节,里面详细介绍了如何配置扩展的Composer。

Yii2资源扩展

Yii2中的资源是前端需要用到的如:Js、Css、图片、音频或视频文件。通常来说,资源文件放在Web可访问的目录下,由Web服务器直接读取。在Yii2中,可以通过编写资源管理类,由程序自动管理资源文件。当需要调用资源时,只要在视图或小部件中注册资源类,Yii2框架就能把需要用到的资源包含在视图或小部件中。

乍看起来这和扩展似乎并无关系,实则不然,这也是编写本文的主要目的,前文已经提到过在backend和frontend中共用代码的问题,若在前后台应用中分别管理Js或Css文件,并通过资源类进行管理当然可行,但如果项目中有更多应用,那么随之而来的就是这些Js、Css脚本的版本维护问题,在团队开发中这会演变成版本控制的“焦油坑”,而且这也不利于代码复用和分发。我们的目标是实现对有高复用性的代码进行集中管理和维护,且能对这部分代码独立分发,以便于在新的项目中再次复用。

Yii2扩展能很方便地满足我们的需求,下面详细介绍开发过程。

首先在项目目录中找到vender目录,该目录在项目创建之后即会存在,其部署位置默认是在项目根目录中,用于存放Yii2框架和扩展组件,开发者可以通过以下代码修改此目录的位置:$application->setVendorPath(path)。

在vender目录下创建一个子目录,如:nic,用于存放自定义扩展;继续在nic目录中创建子目录,这个目录名称建议按照Yii2扩展开发命名规则,即以“yii2-”开头,如:yii2-nic-common。在yii2-nic-common目录中创建assets目录用于存放资源文件,如Js、Css或图片文件等。至此,目录结构创建完成。

创建资源包管理类,该类必须声明为:yii\web\AssetBundle类的子类,该类有几项用于指定路径的属性,分别说明如下:

$basePath属性:服务器上存放资源文件的位置,必须是Web可见目录,当设置了$sourcePath属性,则该属性将被覆盖;

$baseUrl属性:相对根URL的资源访问路径;

$sourcePath属性:如果资源文件不在Web可见目录中,则要通过该属性指定资源包位置,一旦设置了该属性,将会覆盖$basePath属性;

$css属性:该属性数据类型为数组,用于指定本资源包需要包含的所有样式表文件;

$js属性:该属性数据类型为数组,用于指定本资源包需要包含的所有javascript文件;

$depends属性:该属性数据类型为数组,用于指定本资源包依赖的所有外部资源包,这些资源包类必须已经通过类自动装载器载入,注意:要从命名空间开始标识依赖的资源包;

完整的资源包类代码如下:

namespace nic\common;

use yii\web\AssetBundle;

/**
 * @author gunnery
 */
class NicCommonAsset extends AssetBundle
{
    public $sourcePath = __DIR__ . "/assets";

    public $js = [
        'nic.common.js',
    ];

    public $css = [
        'nic.common.css',
        'nic.bootstrap.css',
    ];

    public $depends = [
        'yii\web\JqueryAsset',
        'yii\bootstrap\BootstrapAsset',
        'yii\bootstrap\BootstrapPluginAsset',
        'lo\icofont\IcoFontAsset',
    ];
}

在代码中可见,先通过$sourcePath属性设置资源包的位置,然后分别用$js属性和$css属性设置的js文件和css文件的名称,再通过$deoends属性设置依赖项。

仅有资源包代码还不能在应用中调用,还需要在扩展配置文件中添加资源包的位置,确定类自动装载器能将载入资源包类。

进入vender目录下的yiisoft目录,可以看到有个名为extensions.php的文件,打开文件可以看到里面已经配置了很多默认自带的扩展。在返回数组的最后增加一项元素,配置为如下内容:

// Nic扩展
'nic' =>
    array (
        'name' => 'nic',
        'version' => '1.0.0',
        'alias' =>
            array (
                '@nic/common' => $vendorDir . '/nic/yii2-common',
            ),
    ),

配置好扩展文件后,就能在视图或者小部件中注册资源包了,注册方法很简单,只要调用资源包的静态注册方法即可:NicCommonAsset::register(your_view); 即可完成注册,在视图渲染过程中,会自动将必要的资源文件加载在视图上。

关于小部件扩展下次再写,过程与此类似。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值