【Yii2】使用AssetBundle中的$sourcePath對資源文件進引入和調用

環境

  • Yii 2.0.15.1
  • PHP 7.2.7

AppAsset

AppAsset在項目根目錄下的assets文件夾內,作用是控制項目的資源文件。

資源文件也就是我們的js/css這些文件。

下面是自帶的AppAsset類

namespace app\assets;

use yii\web\AssetBundle;

/**
 * Main application asset bundle.
 *
 * @author Qiang Xue <[email protected]>
 * @since 2.0
 */
class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';//項目文件夾
    public $baseUrl = '@web';
    public $css = [//單獨引入的
        'css/site.css',
    ];
    public $js = [
    ];
    //繼承了下面的兩個資源類
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

自定義資源類

目的

創建一個資源類,作爲網頁佈局中新的layout文件,將項目資源文件放到不可訪問的文件夾內,讓Yii2自動引入到web文件夾內

$sourcePath

這裏配置的重點是$sourcePath,這裏定義的是源資源的位置,只定義這個之後,就會自動引入到web下的assets文件夾內。

下面是完整的資源類文件

namespace app\assets;

use yii\web\AssetBundle;

/**
 * 後臺管理的基本資源文件
 * @package app\assets
 */
class AdminAsset extends AssetBundle
{
    //資源文件的源文件位置
    public $sourcePath = '@app/res'; 
    //當前事例引入的文件
    public $css = [
        'assets/vendors/custom/fullcalendar/fullcalendar.bundle.css',
        'assets/vendors/base/vendors.bundle.css',
        'assets/demo/default/base/style.bundle.css'
    ];
    public $js = [
        'assets/vendors/base/vendors.bundle.js',
        'assets/demo/default/base/scripts.bundle.js'
    ];
    //沒有依賴
    public $depends = [

    ];
}

自動引入資源

在本文的事例中,我創建了一個新的layout文件。

下面的內容放在視圖文件的最前面,即可完成對資源文件的複製,Yii2就會自動複製到web下的assets文件夾內。

use yii\helpers\Html;
use app\assets\AdminAsset;

AdminAsset::register($this);

自動引用資源

僅僅寫上面的內容,是不能引入css和js文件的,還需要做下面的處理。

<head>
<?php $this->head() ?>
</head>

寫在head中,讓視圖確定網頁的head位置。這時會自動引入css文件。

<body>
<?php $this->beginBody() ?>

<?php $this->endBody() ?>
</body>

這對標籤寫在Body中間,讓視圖確認網頁的Body位置.這時會在body最後自動引入js內容。

總結

這樣就完成了資源引入->資源調用->視圖展示的完整流程

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