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); 即可完成註冊,在視圖渲染過程中,會自動將必要的資源文件加載在視圖上。

關於小部件擴展下次再寫,過程與此類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章