エイリアス
ファイルパスや URL を表すのにエイリアスを使用すると、あなたはプロジェクト内で絶対パスや URL をハードコードする必要がなくなります。エイリアスは、通常のファイルパスや URL と区別するために、 @
文字で始まる必要があります。Yii はすでに利用可能な多くの事前定義エイリアスを持っています。
たとえば、 @yii
というエイリアスは Yii フレームワークのインストールパスを表し、 @web
は現在実行中の Web アプリケーションのベース URL を表します。
エイリアスの定義
[[Yii::setAlias()]] を呼び出すことにより、ファイルパスまたは URL のエイリアスを定義することができます。
// ファイルパスのエイリアス
Yii::setAlias('@foo', '/path/to/foo');
// URL のエイリアス
Yii::setAlias('@bar', 'http://www.example.com');
補足: エイリアスされているファイルパスやURLは、必ずしも実在するファイルまたはリソースを参照しない場合があります。
定義済みのエイリアスがあれば、スラッシュ /
に続けて 1 つ以上のパスセグメントを追加することで([[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を解決することができます。 同メソッドで、対応するファイルパスまたは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は、派生エイリアス内のルートエイリアス部分を、対応するパス/URL で置換して決定されます。
補足: [[Yii::getAlias()]] メソッドは、 結果のパスやURLが実在するファイルやリソースを参照しているかをチェックしません。
ルートエイリアス名にはスラッシュ /
文字を含むことができます。 [[Yii::getAlias()]] メソッドは、
エイリアスのどの部分がルートエイリアスであるかを賢く判別し、正確に対応するファイルパスやURLを決定します:
Yii::setAlias('@foo', '/path/to/foo');
Yii::setAlias('@foo/bar', '/path2/bar');
Yii::getAlias('@foo/test/file.php'); // /path/to/foo/test/file.php を表示
Yii::getAlias('@foo/bar/file.php'); // /path2/bar/file.php を表示
もし @foo/bar
がルートエイリアスとして定義されていなければ、最後のステートメントは /path/to/foo/bar/file.php
を表示します。
エイリアスの使用
エイリアスは、それをパスやURLに変換するための [[Yii::getAlias()]] の呼び出しがなくても、Yiiの多くの場所でみられます。
たとえば、 [[yii\caching\FileCache::cachePath]] ファイルパスとファイルパスを表すエイリアスの両方を受け入れることができ、
@
プレフィックスによって、エイリアスとファイルパスを区別することができます。
use yii\caching\FileCache;
$cache = new FileCache([
'cachePath' => '@runtime/cache',
]);
プロパティやメソッドのパラメータがエイリアスをサポートしているかどうかは、API ドキュメントに注意を払ってください。
事前定義されたエイリアス
Yii では、一般的に使用されるファイルのパスと URL を簡単に参照できるよう、エイリアスのセットが事前に定義されています:
-
@yii
,BaseYii.php
ファイルがあるディレクトリ (フレームワークディレクトリとも呼ばれます) -
@app
, 現在実行中のアプリケーションの [[yii\base\Application::basePath|ベースパス]] -
@runtime
, 現在実行中のアプリケーションの [[yii\base\Application::runtimePath|ランタイムパス]] 。デフォルトは@app/runtime
。 -
@webroot
, 現在実行中の Web アプリケーションの Web ルートディレクトリ。エントリスクリプトを含むディレクトリをもとに決定されます。 -
@web
, 現在実行中の Web アプリケーションのベース URL。これは、 [[yii\web\Request::baseUrl]] と同じ値を持ちます。 -
@vendor
, [[yii\base\Application::vendorPath|Composerのベンダーディレクトリ]] 。デフォルトは@app/vendor
。 -
@bower
, bower パッケージ が含まれるルートディレクトリ。デフォルトは@vendor/bower
。 -
@npm
, npm パッケージ が含まれるルートディレクトリ。デフォルトは@vendor/npm
。
@yii
エイリアスは エントリスクリプト に Yii.php
ファイルを読み込んだ時点で定義されます。
エイリアスの残りの部分は、アプリケーションのコンストラクタ内で、アプリケーションの 構成情報 を適用するときに定義されます。
エクステンションのエイリアス
Composer でインストールされる各 エクステンション ごとに、エイリアスが自動的に定義されます。
各エイリアスは、その composer.json
ファイルで宣言された、エクステンションのルート名前空間にちなんで名付けられており、
それらは、パッケージのルートディレクトリを表します。たとえば、あなたが yiisoft/yii2-jui
エクステンションをインストールしたとすると、
自動的に @yii/jui
というエイリアスができ、 ブートストラップ 段階で、次のと同等のものとして定義されます:
Yii::setAlias('@yii/jui', 'VendorPath/yiisoft/yii2-jui');