
- Yii 教程
- Yii - 首頁
- Yii - 概述
- Yii - 安裝
- Yii - 建立頁面
- Yii - 應用程式結構
- Yii - 入口指令碼
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模組
- Yii - 檢視
- Yii - 佈局
- Yii - 資產
- Yii - 資產轉換
- Yii - 擴充套件
- Yii - 建立擴充套件
- Yii - HTTP 請求
- Yii - 響應
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 規則
- Yii - HTML 表單
- Yii - 驗證
- Yii - 特設驗證
- Yii - AJAX 驗證
- Yii - 會話
- Yii - 使用快閃記憶體資料
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 檔案上傳
- Yii - 格式化
- Yii - 分頁
- Yii - 排序
- Yii - 屬性
- Yii - 資料提供者
- Yii - 資料小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 建立事件
- Yii - 行為
- Yii - 建立行為
- Yii - 配置
- Yii - 依賴注入
- Yii - 資料庫訪問
- Yii - 資料訪問物件
- Yii - 查詢生成器
- Yii - 活動記錄
- Yii - 資料庫遷移
- Yii - 主題
- Yii - RESTful API
- Yii - RESTful API 實踐
- Yii - 欄位
- Yii - 測試
- Yii - 快取
- Yii - 片段快取
- Yii - 別名
- Yii - 日誌記錄
- Yii - 錯誤處理
- Yii - 身份驗證
- Yii - 授權
- Yii - 本地化
- Yii - Gii
- Gii – 建立模型
- Gii – 生成控制器
- Gii – 生成模組
- Yii 有用資源
- Yii - 快速指南
- Yii - 有用資源
- Yii - 討論
Yii - 資產
資產是指可能在網頁中引用的檔案(css、js、影片、音訊或影像等)。Yii 在**資產包**中管理資產。資產包的目的是將一組相關的**JS**或**CSS**檔案放在程式碼庫中,並能夠透過單個 PHP 呼叫註冊它們。資產包還可以依賴於其他資產包。
在 assets 資料夾中,您將找到基本應用程式模板的資產包:
<?php namespace app\assets; use yii\web\AssetBundle; /** * @author Qiang Xue <qiang.xue@gmail.com> * @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', ]; } ?>
上面的類指定資產檔案位於**@webroot**資料夾內,對應於 URL **@web**。該包不包含任何**JS**檔案,而只包含一個**CSS**檔案。該包依賴於其他包:
yii\web\YiiAsset 和 yii\bootstrap\BootstrapAsset。
AssetBundle 的屬性
以下是 AssetBundle 的屬性。
basePath - 定義一個包含此包中資產檔案的 Web 可訪問目錄。
baseUrl - 指定與 basePath 屬性對應的 URL。
js - 定義此包中包含的 JS 檔案的陣列。
css - 定義此包中包含的 CSS 檔案的陣列。
depends - 定義此包依賴的資產包的陣列。這意味著當前資產包的 CSS 和 JS 檔案將在聲明瞭depends屬性的包之後包含。
sourcePath - 定義包含資產檔案的根目錄。如果根目錄不可透過 Web 訪問,則應設定此屬性。否則,應設定basePath和baseUrl屬性。
cssOptions - 定義將傳遞給yii\web\View∷registerCssFile函式的選項。
jsOptions - 定義將傳遞給yii\web\View::registerJsFile函式的選項。
publishOptions: 指定將傳遞給yii\web\AssetManager::publish函式的選項。
資產的分類
根據位置,資產可以分類為:
源資產 - 資產位於無法透過 Web 直接訪問的目錄中。為了在頁面中使用源資產,應將其複製到 Web 目錄。此過程稱為**資產釋出**。
已釋出資產 - 資產位於 Web 可訪問目錄中
外部資產 - 資產位於另一個 Web 伺服器上。
使用資產包
步驟 1 - 在assets資料夾中,建立一個名為DemoAsset.php的新檔案,內容如下。
<?php namespace app\assets; use yii\web\AssetBundle; class DemoAsset extends AssetBundle { public $basePath = ‘@webroot’; public $baseUrl = ‘@web’; public $js = [‘js/demo.js’]; } ?>
步驟 2 - 我們剛剛聲明瞭一個新的資產包,其中包含一個 demo.js 檔案。現在,在 web/js 資料夾中,建立一個名為 demo.js 的檔案,其中包含以下程式碼。
console.log("hello from demo asset");
步驟 3 - 要註冊新建立的資產包,請轉到 views/layouts 目錄,並在 main.php 檔案的頂部新增以下行。
\app\assets\DemoAsset::register($this);
步驟 4 - 如果將您的 Web 瀏覽器指向https://:8080/index.php,您應該會看到以下 chrome 控制檯輸出。

您還可以定義jsOptions和cssOptions屬性來自定義 CSS 和 JS 檔案在頁面中包含的方式。預設情況下,JS 檔案在結束 body 標記之前包含。
步驟 5 - 要在 head 部分包含 JS 檔案,請按以下方式修改DemoAsset.php檔案。
<?php namespace app\assets; use yii\web\AssetBundle; use yii\web\View; class DemoAsset extends AssetBundle { public $basePath = '@webroot'; public $baseUrl = '@web'; public $js = ['js/demo.js']; public $jsOptions = ['position' => View::POS_HEAD]; } ?>
步驟 6 - 現在轉到https://:8080/index.php,您應該會看到demo.js指令碼包含在頁面的 head 部分。

對於在生產模式下執行的 Web 應用程式,啟用資產的 HTTP 快取是一種常見做法。這樣做,最後修改時間戳將附加到所有已釋出的資產。
步驟 7 - 轉到config資料夾並修改web.php檔案,如以下程式碼所示。
<?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'assetManager' => [ 'appendTimestamp' => true, ], 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is //required by cookie validation 'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), ], 'modules' => [ 'hello' => [ 'class' => 'app\modules\hello\Hello', ], ], 'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config; ?>
我們添加了AssetManager元件並設定了appendTimestamp屬性。
步驟 8 - 現在在 Web 瀏覽器的位址列中鍵入https://:8080/index.php。您會注意到所有資產現在都具有時間戳,如以下影像所示。

核心 Yii 資產包
以下是核心 Yii 資產包。
yii\web\JqueryAsset - 包含 jquery.js 檔案。
yii\web\YiiAsset - 包含 yii.js 檔案,該檔案實現了在模組中組織 JS 程式碼的機制。
yii\bootstrap\BootstrapAsset - 包含來自 Twitter Bootstrap 框架的 CSS 檔案。
yii\bootstrap\BootstrapPluginAsset - 包含來自 Twitter Bootstrap 框架的 JS 檔案。
yii\jui\JuiAsset - 包含來自 jQuery UI 庫的 CSS 和 JS 檔案。