首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii 2.0 預定義路徑別名完整表:@yii、@app、@vendor、@runtime、@web 等 12 個核心別名用法詳解

     編輯:PHP 相關知識

Yii 2.0 預定義路徑別名完整表:@yii、@app、@vendor、@runtime、@web 等 12 個核心別名用法詳解

Yii 2.0 以 別名 系統統一管理路徑與 URL,避免硬編碼絕對路徑。框架啟動時自動註冊 12 個核心別名 (11 路徑 + 1 URL),擴展透過 Composer 自動註冊二級別名。本文逐項解析各別名指向、典型使用場景、動態解析方法與擴展別名註冊機制。

一、12 個核心別名完整對照表

別名類型指向路徑/URL典型值範例使用場景
@yii路徑框架核心目錄 (含 BaseYii.php)/vendor/yiisoft/yii2引用框架內部類、預設配置
@app路徑當前應用根目錄 (入口腳本所在專案根目錄)/var/www/myapp (basic)
/var/www/myapp/frontend (advanced)
所有業務代碼相對路徑基準
@vendor路徑Composer vendor 目錄@app/vendor 或 @app/../vendor第三方庫路徑、Yii::getAlias('@vendor/foo/bar')
@bower路徑Bower 套件目錄@vendor/bower前端舊套件 (已棄用,建議遷移 npm)
@npm路徑NPM 套件目錄 (via fxp/composer-asset-plugin)@vendor/npm前端套件來源,配合 AssetBundle
@runtime路徑運行時緩存/日誌/會話目錄@app/runtime寫入臨時檔、日誌、快取
@webroot路徑Web 入口目錄 (含 index.php)@app/web (basic/advanced frontend)公開資源根目錄、上傳檔案存放
@webURL應用根 URL (含 scheme/host/path)https://example.com 或 /frontend/web生成完整連結、AJAX 請求 URL、資源引用
@common路徑Advanced 模板共用代碼目錄/var/www/myapp/common跨前後台共用 Model/Component
@frontend路徑前台應用目錄/var/www/myapp/frontend前台專用 Controller/View/Config
@backend路徑後台應用目錄/var/www/myapp/backend後台專用 Controller/View/Config
@console路徑命令列應用目錄/var/www/myapp/consoleMigration、Cron、Queue Worker

二、別名解析與動態使用

<?php
// 1. 解析為實際路徑/URL
$path = Yii::getAlias('@runtime/logs/app.log'); // → /var/www/myapp/runtime/logs/app.log
$url  = Yii::getAlias('@web/images/logo.png');  // → https://example.com/images/logo.png

// 2. 檢查別名是否存在
if (Yii::getAlias('@npm/jquery', false) !== false) { ... }

// 3. 在配置檔中使用 (main.php)
'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache',
        'cachePath' => '@runtime/cache', // 自動解析
    ],
    'view' => [
        'theme' => [
            'pathMap' => ['@app/views' => '@app/themes/basic/views'],
        ],
    ],
],

// 4. AssetBundle 中引用
class MyAsset extends AssetBundle {
    public $sourcePath = '@bower/jquery/dist'; // 或 @npm/jquery/dist
    public $js = ['jquery.min.js'];
}

// 5. 控制器/視圖快捷用法
$this->registerJsFile(Yii::getAlias('@web') . '/js/app.js');
?>

三、擴展自動註冊二級別名機制

Composer 安裝擴展時,若 composer.json 含 extra.asset-aliases 或 extra.yii-aliases,框架啟動會自動註冊:

// vendor/yiisoft/yii2-jui/composer.json 片段
"extra": {
    "yii-aliases": {
        "@yii/jui": ""
    }
}
// 安裝後可直接用 @yii/jui 指向該擴展根目錄

四、自定義別名註冊 (bootstrap 階段)

<?php
// config/bootstrap.php 或 common/config/bootstrap.php
Yii::setAlias('@storage', '/mnt/nfs/storage');
Yii::setAlias('@cdn', 'https://cdn.example.com');

// 甚至可覆蓋核心別名 (謹慎)
Yii::setAlias('@runtime', '/tmp/yii-runtime-' . getmypid());

五、進階:別名與容器化/多環境部署

  • Docker 卷掛載: @runtime、@webroot/uploads 掛載宿主機目錄,容器重建不丟資料
  • 雲存儲遷移: 將 @webroot/uploads 映射至 S3/OSS 掛載點,或自定義 @storage 指向雲端 SDK 封裝
  • 多站點共用代碼: 同一 @app 下不同 @frontend/@backend 共享 @common,配置差異化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved