W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
別名用來表示文件路徑和 URL,這樣就避免了在代碼中硬編碼一些絕對路徑和 URL。一個別名必須以?@
?字符開頭,以區(qū)別于傳統(tǒng)的文件路徑和 URL。Yii 預定義了大量可用的別名。例如,別名?@yii
?指的是 Yii 框架本身的安裝目錄,而?@web
?表示的是當前運行應用的根 URL。
你可以調用 Yii::setAlias() 來給文件路徑或 URL 定義別名:
// 文件路徑的別名
Yii::setAlias('@foo', '/path/to/foo');
// URL 的別名
Yii::setAlias('@bar', 'http://www.example.com');
注意:別名所指向的文件路徑或 URL 不一定是真實存在的文件或資源。
可以通過在一個別名后面加斜杠?/
?和一至多個路徑分段生成新別名(無需調用 Yii::setAlias())。我們把通過 Yii::setAlias() 定義的別名稱為根別名,而用他們衍生出去的別名成為衍生別名。例如,@foo
?就是根別名,而?@foo/bar/file.php
?是一個衍生別名。
你還可以用別名去定義新別名(根別名與衍生別名均可):
Yii::setAlias('@foobar', '@foo/bar');
根別名通常在引導階段定義。比如你可以在入口腳本里調用 Yii::setAlias()。為了方便起見,應用提供了一個名為?aliases
?的可寫屬性,你可以在應用配置中設置它,就像這樣:
return [
// ...
'aliases' => [
'@foo' => '/path/to/foo',
'@bar' => 'http://www.example.com',
],
];
你可以調用 Yii::getAlias() 命令來解析根別名到對應的文件路徑或 URL。同樣的頁面也可以用于解析衍生別名。例如:
echo Yii::getAlias('@foo'); // 輸出:/path/to/foo
echo Yii::getAlias('@bar'); // 輸出:http://www.example.com
echo Yii::getAlias('@foo/bar/file.php'); // 輸出:/path/to/foo/bar/file.php
由衍生別名所解析出的文件路徑和 URL 是通過替換掉衍生別名中的根別名部分得到的。
注意:Yii::getAlias() 并不檢查結果路徑/URL 所指向的資源是否真實存在。
根別名可能也會包含斜杠?/
。Yii::getAlias() 足夠智能到判斷一個別名中的哪部分是根別名,因此能正確解析文件路徑/URL。例如:
Yii::setAlias('@foo', '/path/to/foo');
Yii::setAlias('@foo/bar', '/path2/bar');
echo Yii::getAlias('@foo/test/file.php'); // 輸出:/path/to/foo/test/file.php
echo Yii::getAlias('@foo/bar/file.php'); // 輸出:/path2/bar/file.php
若?@foo/bar
?未被定義為根別名,最后一行語句會顯示為?/path/to/foo/bar/file.php
。
別名在 Yii 的很多地方都會被正確識別,無需調用 Yii::getAlias() 來把它們轉換為路徑/URL。例如,yii\caching\FileCache::cachePath 能同時接受文件路徑或是指向文件路徑的別名,因為通過?@
?前綴能區(qū)分它們。
use yii\caching\FileCache;
$cache = new FileCache([
'cachePath' => '@runtime/cache',
]);
請關注 API 文檔了解特定屬性或方法參數(shù)是否支持別名。
Yii 預定義了一系列別名來簡化常用路徑和 URL 的使用:
@yii
?-?BaseYii.php
?文件所在的目錄(也被稱為框架安裝目錄)@app
?- 當前運行的應用 yii\base\Application::basePath@runtime
?- 當前運行的應用的 yii\base\Application::runtimePath@vendor
?- yii\base\Application::vendorPath@webroot
?- 當前運行應用的 Web 入口目錄@web
?- 當前運行應用的根 URL@yii
?別名是在入口腳本里包含?Yii.php
?文件時定義的,其他的別名都是在配置應用的時候,于應用的構造方法內定義的。
每一個通過 Composer 安裝的?擴展?都自動添加了一個別名。該別名會以該擴展在?composer.json
?文件中所聲明的根命名空間為名,且他直接代指該包的根目錄。例如,如果你安裝有?yiisoft/yii2-jui
?擴展,會自動得到?@yii/jui
?別名,它定義于引導啟動階段:
Yii::setAlias('@yii/jui', 'VendorPath/yiisoft/yii2-jui');
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: