クラス yii\web\AssetManager
継承 | yii\web\AssetManager » yii\base\Component » yii\base\BaseObject |
---|---|
実装 | yii\base\Configurable |
利用可能なバージョン | 2.0 |
ソースコード | https://github.com/yiisoft/yii2/blob/master/framework/web/AssetManager.php |
AssetManager はアセットバンドルの構成と読み込みを管理します。
AssetManager はデフォルトで yii\web\Application のアプリケーションコンポーネントとして構成されています。Yii::$app->assetManager
を通してそのインスタンスにアクセスできます。
次の例に示すように、アプリケーション構成の components
に配列を追加することで、その構成を変更できます。
'assetManager' => [
'bundles' => [
// you can override AssetBundle configs here
],
]
AssetManager の詳細および使用方法については、アセットに関するガイド記事を参照してください。
公開プロパティ
公開メソッド
保護されたメソッド
メソッド | 説明 | 定義元 |
---|---|---|
hash() | ディレクトリパスの CRC32 ハッシュを生成します。衝突は MD5 よりも高いですが、はるかに小さなハッシュ文字列を生成します。 | yii\web\AssetManager |
loadBundle() | 名前でアセットバンドルクラスをロードします。 | yii\web\AssetManager |
loadDummyBundle() | 名前でダミーバンドルをロードします。 | yii\web\AssetManager |
publishDirectory() | ディレクトリを公開します。 | yii\web\AssetManager |
publishFile() | ファイルを公開します。 | yii\web\AssetManager |
resolveAsset() | yii\web\AssetManager |
プロパティの詳細
サブディレクトリまたはファイルのコピーが正常に完了した後に呼び出されるPHPのコールバックです。このオプションは、ディレクトリを公開する場合にのみ使用されます。コールバックのシグネチャは、$beforeCopyと同じです。これは、yii\helpers\FileHelper::copyDirectory()にafterCopy
パラメータとして渡されます。
公開されたすべてのアセットのURLにタイムスタンプを追加するかどうか。これがtrueの場合、公開されたアセットのURLは/path/to/asset?v=timestamp
のように見える場合があります。ここでtimestamp
は、公開されたアセットファイルの最終更新時刻です。通常、アセットに対してHTTPキャッシングを有効にしている場合は、このプロパティをtrueに設定する必要があります。これにより、アセットが更新されたときにキャッシュを破棄できます。
ソースアセットファイル(キー)からターゲットアセットファイル(値)へのマッピング。
このプロパティは、一部のアセットバンドルで誤ったアセットファイルパスを修正するために提供されます。アセットバンドルがビューに登録されると、そのcss配列とjs配列内の各相対アセットファイルがこのマップに対して調べられます。キーのいずれかがアセットファイルの最後の部分(yii\web\AssetBundle::$sourcePathが利用可能な場合は、これがプレフィックスとして付加されます)であることが判明した場合、対応する値がアセットを置き換え、ビューに登録されます。たとえば、アセットファイルmy/path/to/jquery.js
はキーjquery.js
と一致します。
ターゲットアセットファイルは、絶対URL、ドメイン相対URL('/'から始まる)、または$baseUrlおよび$basePathに対する相対パスである必要があることに注意してください。
次の例では、jquery.min.js
で終わるすべてのアセットが、$baseUrlおよび$basePathに対する相対パスであるjquery/dist/jquery.js
に置き換えられます。
[
'jquery.min.js' => 'jquery/dist/jquery.js',
]
マップ値を指定するときにエイリアスを使用することもできます。たとえば
[
'jquery.min.js' => '@web/js/jquery/jquery.js',
]
各サブディレクトリまたはファイルのコピー前に呼び出されるPHPのコールバックです。このオプションは、ディレクトリを公開する場合にのみ使用されます。コールバックがfalseを返した場合、サブディレクトリまたはファイルのコピー操作はキャンセルされます。
コールバックのシグネチャは、function ($from, $to)
である必要があります。ここで$from
はコピー元のサブディレクトリまたはファイル、$to
はコピー先です。
これは、yii\helpers\FileHelper::copyDirectory()にbeforeCopy
パラメータとして渡されます。
アセットバンドルの構成のリスト。このプロパティは、アセットバンドルをカスタマイズするために提供されます。getBundle()によってバンドルがロードされるときに、ここに指定された対応する構成がある場合、構成がバンドルに適用されます。
配列キーはアセットバンドル名であり、通常は先頭のバックスラッシュなしのアセットバンドルクラス名です。配列値は、対応する構成です。値がfalseの場合、対応するアセットバンドルが無効になっていることを意味し、getBundle()はnullを返す必要があります。
このプロパティがfalseの場合、アセットバンドル機能全体が無効になっていることを意味し、getBundle()は常にnullを返します。
次の例は、Bootstrapウィジェットで使用されるbootstrap cssファイルを無効にする方法を示しています(独自のスタイルを使用する場合)。
[
'yii\bootstrap\BootstrapAsset' => [
'css' => [],
],
]
アセットコンバーター。このプロパティの型はゲッターとセッターで異なることに注意してください。詳細は、getConverter()およびsetConverter()を参照してください。
新しく生成されたアセットディレクトリに設定されるアクセス許可。この値は、PHPのchmod()関数で使用されます。umaskは適用されません。デフォルトは0775です。これは、ディレクトリが所有者とグループによって読み書き可能であり、他のユーザーに対しては読み取り専用であることを意味します。
新しく公開されたアセットファイルに設定されるアクセス許可。この値は、PHPのchmod()関数で使用されます。umaskは適用されません。設定しない場合、アクセス許可は現在の環境によって決定されます。
公開対象のディレクトリがターゲットディレクトリに存在する場合でも、コピーするかどうかを指定します。このオプションは、ディレクトリを公開する場合にのみ使用されます。開発段階では、公開されたディレクトリが常に最新の状態になるように、このオプションをtrue
に設定したい場合があります。本番環境のサーバーでは、パフォーマンスが著しく低下するため、このオプションをtrueに設定しないでください。
アセットディレクトリの生成時にハッシュを生成するために呼び出されるコールバック。コールバックのシグネチャは次のとおりである必要があります。
function ($path)
ここで、$path
はアセットのパスです。$path
は、アセットファイルが存在するディレクトリまたは単一のファイルのいずれかであることに注意してください。url()
で相対パスを使用する CSS ファイルの場合、ハッシュの実装では、ファイルのパスではなくファイルのディレクトリパスを使用して、相対アセットファイルをコピーに含める必要があります。
これが設定されていない場合、アセットマネージャーは hash
メソッドでデフォルトの CRC32 と filemtime を使用します。
MD4 ハッシュを使用した実装例
function ($path) {
return hash('md4', $path);
}
アセットファイルを公開するためにシンボリックリンクを使用するかどうかを指定します。デフォルトは false で、アセットファイルは $basePath にコピーされることを意味します。シンボリックリンクを使用すると、公開されたアセットが常にソースアセットと一致し、コピー操作が不要になるという利点があります。これは開発中に特に役立ちます。
ただし、シンボリックリンクを使用するには、ホスティング環境に特別な要件があります。特に、シンボリックリンクは、Linux/Unix、および Windows Vista/2008 以降でのみサポートされています。
さらに、一部のWebサーバーでは、リンクされたアセットがWebユーザーにアクセスできるように適切に構成する必要があります。たとえば、Apache Webサーバーの場合、Webフォルダーに次の構成ディレクティブを追加する必要があります。
Options FollowSymLinks
メソッドの詳細
定義元: yii\base\Component::__call()
クラスメソッドではない名前付きメソッドを呼び出します。
このメソッドは、アタッチされたビヘイビアに指定されたメソッドがあるかどうかを確認し、利用可能な場合は実行します。
このメソッドは、不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。
public mixed __call ( $name, $params ) | ||
$name | string |
メソッド名 |
$params | array |
メソッドのパラメーター |
return | mixed |
メソッドの戻り値 |
---|---|---|
throws | yii\base\UnknownMethodException |
不明なメソッドを呼び出すとき |
public function __call($name, $params)
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
定義元: yii\base\Component::__clone()
このメソッドは、既存のオブジェクトをクローンすることによってオブジェクトが作成された後に呼び出されます。
古いオブジェクトにアタッチされているため、すべてのビヘイビアを削除します。
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
定義元: yii\base\BaseObject::__construct()
コンストラクタ。
デフォルトの実装では、次の2つのことを行います。
- 指定された構成
$config
を使用してオブジェクトを初期化します。 - init()を呼び出します。
このメソッドが子クラスでオーバーライドされている場合は、以下をお勧めします。
- コンストラクターの最後のパラメーターは、ここでの
$config
のような構成配列です。 - コンストラクターの最後に親の実装を呼び出します。
public void __construct ( $config = [] ) | ||
$config | array |
オブジェクトのプロパティを初期化するために使用される名前と値のペア |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定義元: yii\base\Component::__get()
コンポーネントプロパティの値を返します。
このメソッドは、次の順序で確認し、それに応じて動作します。
- ゲッターによって定義されたプロパティ:ゲッターの結果を返します
- ビヘイビアのプロパティ:ビヘイビアのプロパティ値を返します
このメソッドは、$value = $component->property;
を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。
__set()も参照してください。
public mixed __get ( $name ) | ||
$name | string |
プロパティ名 |
return | mixed |
プロパティ値またはビヘイビアのプロパティの値 |
---|---|---|
throws | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
throws | yii\base\InvalidCallException |
プロパティが書き込み専用の場合。 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
// read property, e.g. getName()
return $this->$getter();
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name;
}
}
if (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定義元: yii\base\Component::__isset()
プロパティが設定されているか、つまり定義されていて null でないかをチェックします。
このメソッドは、次の順序で確認し、それに応じて動作します。
- セッターによって定義されたプロパティ:プロパティが設定されているかどうかを返します
- ビヘイビアのプロパティ:プロパティが設定されているかどうかを返します
- 存在しないプロパティの場合は
false
を返します
このメソッドは、isset($component->property)
を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。
public boolean __isset ( $name ) | ||
$name | string |
プロパティ名またはイベント名 |
return | boolean |
指定されたプロパティが設定されているかどうか |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name !== null;
}
}
return false;
}
定義元: yii\base\Component::__set()
コンポーネントプロパティの値を設定します。
このメソッドは、次の順序で確認し、それに応じて動作します。
- セッターによって定義されたプロパティ:プロパティ値を設定します
- "on xyz"の形式のイベント:イベント "xyz"にハンドラーをアタッチします
- "as xyz"の形式のビヘイビア:"xyz"という名前のビヘイビアをアタッチします
- ビヘイビアのプロパティ:ビヘイビアのプロパティ値を設定します
このメソッドは、$component->property = $value;
を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。
__get()も参照してください。
public void __set ( $name, $value ) | ||
$name | string |
プロパティ名またはイベント名 |
$value | mixed |
プロパティ値 |
throws | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
---|---|---|
throws | yii\base\InvalidCallException |
プロパティが読み取り専用の場合。 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
// set property
$this->$setter($value);
return;
} elseif (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
} elseif (strncmp($name, 'as ', 3) === 0) {
// as behavior: attach behavior
$name = trim(substr($name, 3));
$this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = $value;
return;
}
}
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
定義元: yii\base\Component::__unset()
コンポーネントプロパティを null に設定します。
このメソッドは、次の順序で確認し、それに応じて動作します。
- セッターによって定義されたプロパティ: プロパティ値をnullに設定します
- ビヘイビアのプロパティ: プロパティ値をnullに設定します
このメソッドは、unset($component->property)
を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。
以下も参照してください: https://www.php.net/manual/en/function.unset.php.
public void __unset ( $name ) | ||
$name | string |
プロパティ名 |
throws | yii\base\InvalidCallException |
プロパティが読み取り専用の場合。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = null;
return;
}
}
throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}
定義元: yii\base\Component::attachBehavior()
このコンポーネントにビヘイビアをアタッチします。
このメソッドは、指定された構成に基づいてビヘイビアオブジェクトを作成します。その後、yii\base\Behavior::attach()メソッドを呼び出すことによって、ビヘイビアオブジェクトはこのコンポーネントにアタッチされます。
以下も参照してください: detachBehavior().
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
ビヘイビアの名前。 |
$behavior | string|array|yii\base\Behavior |
ビヘイビアの構成。次のいずれかになります
|
return | yii\base\Behavior |
ビヘイビアオブジェクト |
---|
public function attachBehavior($name, $behavior)
{
$this->ensureBehaviors();
return $this->attachBehaviorInternal($name, $behavior);
}
定義元: yii\base\Component::attachBehaviors()
コンポーネントにビヘイビアのリストをアタッチします。
各ビヘイビアは、その名前でインデックス化され、yii\base\Behavior オブジェクト、ビヘイビアクラスを指定する文字列、またはビヘイビアを作成するための構成配列である必要があります。
以下も参照してください: attachBehavior().
public void attachBehaviors ( $behaviors ) | ||
$behaviors | array |
コンポーネントにアタッチされるビヘイビアのリスト |
public function attachBehaviors($behaviors)
{
$this->ensureBehaviors();
foreach ($behaviors as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
定義元: yii\base\Component::behaviors()
このコンポーネントが動作するビヘイビアのリストを返します。
子クラスは、このメソッドをオーバーライドして、ビヘイビアとして動作させたいものを指定できます。
このメソッドの戻り値は、ビヘイビア名でインデックス化されたビヘイビアオブジェクトまたは構成の配列である必要があります。ビヘイビア構成は、ビヘイビアクラスを指定する文字列、または次の構造の配列のいずれかになります。
'behaviorName' => [
'class' => 'BehaviorClass',
'property1' => 'value1',
'property2' => 'value2',
]
ビヘイビアクラスはyii\base\Behaviorを拡張する必要があることに注意してください。ビヘイビアは名前を使用するか、匿名でアタッチできます。名前が配列キーとして使用されている場合、この名前を使用して、ビヘイビアは後でgetBehavior()を使用して取得したり、detachBehavior()を使用してデタッチしたりできます。匿名ビヘイビアは取得またはデタッチできません。
このメソッドで宣言されたビヘイビアは、自動的に(必要に応じて)コンポーネントにアタッチされます。
public array behaviors ( ) | ||
return | array |
ビヘイビアの構成。 |
---|
public function behaviors()
{
return [];
}
定義元: yii\base\Component::canGetProperty()
プロパティが読み取り可能かどうかを示す値を返します。
プロパティは、次の場合に読み取ることができます。
- クラスに、指定された名前に関連付けられたgetterメソッドがある場合(この場合、プロパティ名はケースインセンシティブです)。
- クラスに、指定された名前を持つメンバー変数がある場合(
$checkVars
がtrueの場合)。 - アタッチされたビヘイビアに、指定された名前の読み取り可能なプロパティがある場合(
$checkBehaviors
がtrueの場合)。
以下も参照してください: canSetProperty().
public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
return | boolean |
プロパティを読み取ることができるかどうか |
---|
public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
定義元: yii\base\Component::canSetProperty()
プロパティを設定可能かどうかを示す値を返します。
プロパティは、次の場合に書き込むことができます。
- クラスに、指定された名前に関連付けられたsetterメソッドがある場合(この場合、プロパティ名はケースインセンシティブです)。
- クラスに、指定された名前を持つメンバー変数がある場合(
$checkVars
がtrueの場合)。 - アタッチされたビヘイビアに、指定された名前の書き込み可能なプロパティがある場合(
$checkBehaviors
がtrueの場合)。
以下も参照してください: canGetProperty().
public boolean canSetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
return | boolean |
プロパティを書き込むことができるかどうか |
---|
public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
basePath が存在し、書き込み可能かどうかを確認します。
public void checkBasePathPermission ( ) |
public function checkBasePathPermission()
{
// if the check is been done already, skip further checks
if ($this->_isBasePathPermissionChecked) {
return;
}
if (!is_dir($this->basePath)) {
throw new InvalidConfigException("The directory does not exist: {$this->basePath}");
}
if (!is_writable($this->basePath)) {
throw new InvalidConfigException("The directory is not writable by the Web process: {$this->basePath}");
}
$this->_isBasePathPermissionChecked = true;
}
::class
を使用してください。
定義元: yii\base\BaseObject::className()
このクラスの完全修飾名を返します。
public static string className ( ) | ||
return | string |
このクラスの完全修飾名。 |
---|
public static function className()
{
return get_called_class();
}
定義元: yii\base\Component::detachBehavior()
コンポーネントからビヘイビアをデタッチします。
ビヘイビアのyii\base\Behavior::detach()メソッドが呼び出されます。
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
ビヘイビアの名前。 |
return | yii\base\Behavior|null |
デタッチされたビヘイビア。ビヘイビアが存在しない場合はNull。 |
---|
public function detachBehavior($name)
{
$this->ensureBehaviors();
if (isset($this->_behaviors[$name])) {
$behavior = $this->_behaviors[$name];
unset($this->_behaviors[$name]);
$behavior->detach();
return $behavior;
}
return null;
}
定義元: yii\base\Component::detachBehaviors()
コンポーネントからすべてのビヘイビアをデタッチします。
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
定義元: yii\base\Component::ensureBehaviors()
behaviors() で宣言されたビヘイビアがこのコンポーネントにアタッチされていることを確認します。
public void ensureBehaviors ( ) |
public function ensureBehaviors()
{
if ($this->_behaviors === null) {
$this->_behaviors = [];
foreach ($this->behaviors() as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
}
指定されたアセットの実際の URL を返します。パラメータなし。
実際の URL は、指定されたアセットパスの前に yii\web\AssetBundle::$baseUrl または yii\web\AssetManager::$baseUrl のどちらかを付加することによって取得されます。
public string getActualAssetUrl ( $bundle, $asset ) | ||
$bundle | yii\web\AssetBundle |
アセットファイルが属するアセットバンドル |
$asset | string |
アセットパス。これは、yii\web\AssetBundle::$js または yii\web\AssetBundle::$css にリストされているアセットのいずれかである必要があります。 |
return | string |
指定されたアセットの実際の URL。 |
---|
public function getActualAssetUrl($bundle, $asset)
{
if (($actualAsset = $this->resolveAsset($bundle, $asset)) !== false) {
if (strncmp($actualAsset, '@web/', 5) === 0) {
$asset = substr($actualAsset, 5);
$baseUrl = Yii::getAlias('@web');
} else {
$asset = Yii::getAlias($actualAsset);
$baseUrl = $this->baseUrl;
}
} else {
$baseUrl = $bundle->baseUrl;
}
if (!Url::isRelative($asset) || strncmp($asset, '/', 1) === 0) {
return $asset;
}
return "$baseUrl/$asset";
}
指定されたアセットの実際のファイルパスを返します。
public string|false getAssetPath ( $bundle, $asset ) | ||
$bundle | yii\web\AssetBundle |
アセットファイルが属するアセットバンドル |
$asset | string |
アセットパス。これは、yii\web\AssetBundle::$js または yii\web\AssetBundle::$css にリストされているアセットのいずれかである必要があります。 |
return | string|false |
実際のファイルパス。アセットが絶対 URL として指定されている場合は |
---|
public function getAssetPath($bundle, $asset)
{
if (($actualAsset = $this->resolveAsset($bundle, $asset)) !== false) {
return Url::isRelative($actualAsset) ? $this->basePath . '/' . $actualAsset : false;
}
return Url::isRelative($asset) ? $bundle->basePath . '/' . $asset : false;
}
指定されたアセットの実際の URL を返します。
実際の URL は、指定されたアセットパスの前に yii\web\AssetBundle::$baseUrl または yii\web\AssetManager::$baseUrl のどちらかを付加することによって取得されます。
public string getAssetUrl ( $bundle, $asset, $appendTimestamp = null ) | ||
$bundle | yii\web\AssetBundle |
アセットファイルが属するアセットバンドル |
$asset | string |
アセットパス。これは、yii\web\AssetBundle::$js または yii\web\AssetBundle::$css にリストされているアセットのいずれかである必要があります。 |
$appendTimestamp | boolean|null |
URLにタイムスタンプを付加するかどうか。 |
return | string |
指定されたアセットの実際の URL。 |
---|
public function getAssetUrl($bundle, $asset, $appendTimestamp = null)
{
$assetUrl = $this->getActualAssetUrl($bundle, $asset);
$assetPath = $this->getAssetPath($bundle, $asset);
$withTimestamp = $this->appendTimestamp;
if ($appendTimestamp !== null) {
$withTimestamp = $appendTimestamp;
}
if ($withTimestamp && $assetPath && ($timestamp = @filemtime($assetPath)) > 0) {
return "$assetUrl?v=$timestamp";
}
return $assetUrl;
}
定義元: yii\base\Component::getBehavior()
名前付きビヘイビアオブジェクトを返します。
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
ビヘイビア名 |
return | yii\base\Behavior|null |
ビヘイビアオブジェクト。ビヘイビアが存在しない場合は null |
---|
public function getBehavior($name)
{
$this->ensureBehaviors();
return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}
定義元: yii\base\Component::getBehaviors()
このコンポーネントにアタッチされているすべてのビヘイビアを返します。
public yii\base\Behavior[] getBehaviors ( ) | ||
return | yii\base\Behavior[] |
このコンポーネントにアタッチされたビヘイビアのリスト |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
名前付きアセットバンドルを返します。
このメソッドは最初に $bundles でバンドルを探します。見つからない場合、$name
をアセットバンドルのクラスとして扱い、その新しいインスタンスを作成します。
public yii\web\AssetBundle getBundle ( $name, $publish = true ) | ||
$name | string |
アセットバンドルのクラス名(先頭のバックスラッシュなし) |
$publish | boolean |
返される前にアセットバンドル内のアセットファイルを公開するかどうか。これを false に設定した場合、アセットファイルを公開するには、手動で |
return | yii\web\AssetBundle |
アセットバンドルのインスタンス |
---|---|---|
throws | yii\base\InvalidConfigException |
$name が有効なアセットバンドルを参照していない場合 |
public function getBundle($name, $publish = true)
{
if ($this->bundles === false) {
return $this->loadDummyBundle($name);
} elseif (!isset($this->bundles[$name])) {
return $this->bundles[$name] = $this->loadBundle($name, [], $publish);
} elseif ($this->bundles[$name] instanceof AssetBundle) {
return $this->bundles[$name];
} elseif (is_array($this->bundles[$name])) {
return $this->bundles[$name] = $this->loadBundle($name, $this->bundles[$name], $publish);
} elseif ($this->bundles[$name] === false) {
return $this->loadDummyBundle($name);
}
throw new InvalidConfigException("Invalid asset bundle configuration: $name");
}
アセットコンバーターを返します。
public yii\web\AssetConverterInterface getConverter ( ) | ||
return | yii\web\AssetConverterInterface |
アセットコンバーター。 |
---|
public function getConverter()
{
if ($this->_converter === null) {
$this->_converter = Yii::createObject(AssetConverter::className());
} elseif (is_array($this->_converter) || is_string($this->_converter)) {
if (is_array($this->_converter) && !isset($this->_converter['class'])) {
$this->_converter['class'] = AssetConverter::className();
}
$this->_converter = Yii::createObject($this->_converter);
}
return $this->_converter;
}
ファイルパスの公開されたパスを返します。
このメソッドは公開を実行しません。ファイルまたはディレクトリが公開されているかどうか、および公開先を通知するだけです。
public string|false getPublishedPath ( $path ) | ||
$path | string |
公開するディレクトリまたはファイルパス |
return | string|false |
公開されたファイルパスの文字列。ファイルまたはディレクトリが存在しない場合は False |
---|
public function getPublishedPath($path)
{
$path = Yii::getAlias($path);
if (isset($this->_published[$path])) {
return $this->_published[$path][0];
}
if (is_string($path) && ($path = realpath($path)) !== false) {
return $this->basePath . DIRECTORY_SEPARATOR . $this->hash($path) . (is_file($path) ? DIRECTORY_SEPARATOR . basename($path) : '');
}
return false;
}
公開されたファイルパスの URL を返します。
このメソッドは公開を実行しません。ファイルパスが公開されているかどうか、およびそれにアクセスするための URL を通知するだけです。
public string|false getPublishedUrl ( $path ) | ||
$path | string |
公開するディレクトリまたはファイルパス |
return | string|false |
ファイルまたはディレクトリの公開された URL の文字列。ファイルまたはディレクトリが存在しない場合は False。 |
---|
public function getPublishedUrl($path)
{
$path = Yii::getAlias($path);
if (isset($this->_published[$path])) {
return $this->_published[$path][1];
}
if (is_string($path) && ($path = realpath($path)) !== false) {
return $this->baseUrl . '/' . $this->hash($path) . (is_file($path) ? '/' . basename($path) : '');
}
return false;
}
定義元: yii\base\Component::hasEventHandlers()
名前付きイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。
public boolean hasEventHandlers ( $name ) | ||
$name | string |
イベント名 |
return | boolean |
イベントにアタッチされたハンドラがあるかどうか。 |
---|
public function hasEventHandlers($name)
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return Event::hasHandlers($this, $name);
}
定義元: yii\base\Component::hasMethod()
メソッドが定義されているかどうかを示す値を返します。
メソッドは、以下の場合に定義されます
- クラスが指定された名前のメソッドを持っている
- アタッチされたビヘイビアが指定された名前のメソッドを持っている(
$checkBehaviors
が true の場合)。
public boolean hasMethod ( $name, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkBehaviors | boolean |
ビヘイビアのメソッドをこのコンポーネントのメソッドとして扱うかどうか |
return | boolean |
メソッドが定義されているかどうか |
---|
public function hasMethod($name, $checkBehaviors = true)
{
if (method_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->hasMethod($name)) {
return true;
}
}
}
return false;
}
定義元: yii\base\Component::hasProperty()
このコンポーネントにプロパティが定義されているかどうかを示す値を返します。
プロパティが定義されている条件は以下のとおりです。
- クラスが指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている場合(この場合、プロパティ名は大小文字を区別しません)。
- クラスに、指定された名前を持つメンバー変数がある場合(
$checkVars
がtrueの場合)。 - アタッチされたビヘイビアが指定された名前のプロパティを持っている場合(
$checkBehaviors
がtrueの場合)。
こちらも参照
public boolean hasProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
return | boolean |
プロパティが定義されているかどうか |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
ディレクトリパスの CRC32 ハッシュを生成します。衝突は MD5 よりも高いですが、はるかに小さなハッシュ文字列を生成します。
protected string hash ( $path ) | ||
$path | string |
ハッシュされる文字列。 |
return | string |
ハッシュ化された文字列。 |
---|
protected function hash($path)
{
if (is_callable($this->hashCallback)) {
return call_user_func($this->hashCallback, $path);
}
$path = (is_file($path) ? dirname($path) : $path) . filemtime($path);
return sprintf('%x', crc32($path . Yii::getVersion() . '|' . $this->linkAssets));
}
コンポーネントを初期化します。
public void init ( ) | ||
throws | yii\base\InvalidConfigException |
$basePathが存在しない場合。 |
---|
public function init()
{
parent::init();
$this->basePath = Yii::getAlias($this->basePath);
$this->basePath = realpath($this->basePath);
$this->baseUrl = rtrim(Yii::getAlias($this->baseUrl), '/');
}
名前でアセットバンドルクラスをロードします。
protected yii\web\AssetBundle loadBundle ( $name, $config = [], $publish = true ) | ||
$name | string |
バンドル名 |
$config | array |
バンドルオブジェクトの設定 |
$publish | boolean |
バンドルを公開するかどうか |
throws | yii\base\InvalidConfigException |
設定が無効な場合 |
---|
protected function loadBundle($name, $config = [], $publish = true)
{
if (!isset($config['class'])) {
$config['class'] = $name;
}
/* @var $bundle AssetBundle */
$bundle = Yii::createObject($config);
if ($publish) {
$bundle->publish($this);
}
return $bundle;
}
名前でダミーバンドルをロードします。
protected yii\web\AssetBundle loadDummyBundle ( $name ) | ||
$name | string |
protected function loadDummyBundle($name)
{
if (!isset($this->_dummyBundles[$name])) {
$bundle = Yii::createObject(['class' => $name]);
$bundle->sourcePath = null;
$bundle->js = [];
$bundle->css = [];
$this->_dummyBundles[$name] = $bundle;
}
return $this->_dummyBundles[$name];
}
定義元: yii\base\Component::off()
このコンポーネントから既存のイベントハンドラーをデタッチします。
このメソッドはon()の反対です。
注意: イベント名にワイルドカードパターンが渡された場合、このワイルドカードで登録されたハンドラのみが削除され、このワイルドカードに一致するプレーン名で登録されたハンドラは残ります。
on()も参照してください。
public boolean off ( $name, $handler = null ) | ||
$name | string |
イベント名 |
$handler | callable|null |
削除するイベントハンドラ。nullの場合、指定されたイベントにアタッチされたすべてのハンドラが削除されます。 |
return | boolean |
ハンドラが見つかり、デタッチされた場合 |
---|
public function off($name, $handler = null)
{
$this->ensureBehaviors();
if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
return false;
}
if ($handler === null) {
unset($this->_events[$name], $this->_eventWildcards[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->_events[$name])) {
foreach ($this->_events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_events[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_events[$name] = array_values($this->_events[$name]);
return true;
}
}
// wildcard event names
if (isset($this->_eventWildcards[$name])) {
foreach ($this->_eventWildcards[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_eventWildcards[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
// remove empty wildcards to save future redundant regex checks:
if (empty($this->_eventWildcards[$name])) {
unset($this->_eventWildcards[$name]);
}
}
}
return $removed;
}
イベントにイベントハンドラーをアタッチします。
イベントハンドラは有効なPHPコールバックでなければなりません。以下にいくつかの例を示します。
function ($event) { ... } // anonymous function
[$object, 'handleClick'] // $object->handleClick()
['Page', 'handleClick'] // Page::handleClick()
'handleClick' // global function handleClick()
イベントハンドラは以下のシグネチャで定義する必要があります。
function ($event)
ここで、$event
は、イベントに関連付けられたパラメータを含むyii\base\Eventオブジェクトです。
2.0.14以降、イベント名をワイルドカードパターンとして指定できます。
$component->on('event.group.*', function ($event) {
Yii::trace($event->name . ' is triggered.');
});
off()も参照してください。
public void on ( $name, $handler, $data = null, $append = true ) | ||
$name | string |
イベント名 |
$handler | コールバック |
イベントハンドラ |
$data | mixed |
イベントがトリガーされたときにイベントハンドラに渡されるデータ。イベントハンドラが呼び出されると、このデータはyii\base\Event::$dataを介してアクセスできます。 |
$append | boolean |
新しいイベントハンドラを既存のハンドラリストの最後に追加するかどうか。falseの場合、新しいハンドラは既存のハンドラリストの先頭に挿入されます。 |
public function on($name, $handler, $data = null, $append = true)
{
$this->ensureBehaviors();
if (strpos($name, '*') !== false) {
if ($append || empty($this->_eventWildcards[$name])) {
$this->_eventWildcards[$name][] = [$handler, $data];
} else {
array_unshift($this->_eventWildcards[$name], [$handler, $data]);
}
return;
}
if ($append || empty($this->_events[$name])) {
$this->_events[$name][] = [$handler, $data];
} else {
array_unshift($this->_events[$name], [$handler, $data]);
}
}
ファイルまたはディレクトリを公開します。
このメソッドは、指定されたファイルまたはディレクトリを$basePathにコピーして、Webサーバー経由でアクセスできるようにします。
アセットがファイルの場合、不要なファイルコピーを避けるために、ファイルの変更時刻が確認されます。
アセットがディレクトリの場合、その下のすべてのファイルとサブディレクトリが再帰的に公開されます。$forceCopy
がfalseの場合、メソッドはターゲットディレクトリの存在を確認するだけで、繰り返しコピーすることを避けます(これは非常にコストがかかります)。
デフォルトでは、ディレクトリを公開するとき、名前がドット "." で始まるサブディレクトリとファイルは公開されません。この動作を変更したい場合は、$options
パラメータで説明されているように "beforeCopy" オプションを指定できます。
注意: まれなシナリオでは、公開されたアセットを保持するディレクトリの作成中に、重要ではない問題が一度だけ発生する競合状態が発生する可能性があります。この問題は、「publish()」呼び出しをトリガーするはずのすべてのリソースを事前に「リクエスト」し、システムが稼働する前にアプリケーションのデプロイフェーズでそれを行うことで、完全に回避できます。詳細については、次の議論を参照してください: https://code.google.com/archive/p/yii/issues/2579
public array publish ( $path, $options = [] ) | ||
$path | string |
公開するアセット(ファイルまたはディレクトリ) |
$options | array |
ディレクトリを公開するときに適用されるオプション。次のオプションがサポートされています。
|
return | array |
アセットが公開されるパス(ディレクトリまたはファイルパス)とURL。 |
---|---|---|
throws | yii\base\InvalidArgumentException |
公開するアセットが存在しない場合。 |
throws | yii\base\InvalidConfigException |
ターゲットディレクトリ$basePathが書き込み可能でない場合。 |
public function publish($path, $options = [])
{
$path = Yii::getAlias($path);
if (isset($this->_published[$path])) {
return $this->_published[$path];
}
if (!is_string($path) || ($src = realpath($path)) === false) {
throw new InvalidArgumentException("The file or directory to be published does not exist: $path");
}
if (!is_readable($path)) {
throw new InvalidArgumentException("The file or directory to be published is not readable: $path");
}
if (is_file($src)) {
return $this->_published[$path] = $this->publishFile($src);
}
return $this->_published[$path] = $this->publishDirectory($src, $options);
}
ディレクトリを公開します。
protected string[] publishDirectory ( $src, $options ) | ||
$src | string |
公開するアセットディレクトリ |
$options | array |
ディレクトリを公開するときに適用されるオプション。次のオプションがサポートされています。
|
return | string[] |
アセットが公開されるパスディレクトリとURL。 |
---|---|---|
throws | yii\base\InvalidArgumentException |
公開するアセットが存在しない場合。 |
protected function publishDirectory($src, $options)
{
$this->checkBasePathPermission();
$dir = $this->hash($src);
$dstDir = $this->basePath . DIRECTORY_SEPARATOR . $dir;
if ($this->linkAssets) {
if (!is_dir($dstDir)) {
FileHelper::createDirectory(dirname($dstDir), $this->dirMode, true);
try { // fix #6226 symlinking multi threaded
symlink($src, $dstDir);
} catch (\Exception $e) {
if (!is_dir($dstDir)) {
throw $e;
}
}
}
} elseif (!empty($options['forceCopy']) || ($this->forceCopy && !isset($options['forceCopy'])) || !is_dir($dstDir)) {
$opts = array_merge(
$options,
[
'dirMode' => $this->dirMode,
'fileMode' => $this->fileMode,
'copyEmptyDirectories' => false,
]
);
if (!isset($opts['beforeCopy'])) {
if ($this->beforeCopy !== null) {
$opts['beforeCopy'] = $this->beforeCopy;
} else {
$opts['beforeCopy'] = function ($from, $to) {
return strncmp(basename($from), '.', 1) !== 0;
};
}
}
if (!isset($opts['afterCopy']) && $this->afterCopy !== null) {
$opts['afterCopy'] = $this->afterCopy;
}
FileHelper::copyDirectory($src, $dstDir, $opts);
}
return [$dstDir, $this->baseUrl . '/' . $dir];
}
ファイルを公開します。
protected string[] publishFile ( $src ) | ||
$src | string |
公開するアセットファイル |
return | string[] |
アセットが公開されるパスとURL。 |
---|---|---|
throws | yii\base\InvalidArgumentException |
公開するアセットが存在しない場合。 |
protected function publishFile($src)
{
$this->checkBasePathPermission();
$dir = $this->hash($src);
$fileName = basename($src);
$dstDir = $this->basePath . DIRECTORY_SEPARATOR . $dir;
$dstFile = $dstDir . DIRECTORY_SEPARATOR . $fileName;
if (!is_dir($dstDir)) {
FileHelper::createDirectory($dstDir, $this->dirMode, true);
}
if ($this->linkAssets) {
if (!is_file($dstFile)) {
try { // fix #6226 symlinking multi threaded
symlink($src, $dstFile);
} catch (\Exception $e) {
if (!is_file($dstFile)) {
throw $e;
}
}
}
} elseif (@filemtime($dstFile) < @filemtime($src)) {
copy($src, $dstFile);
if ($this->fileMode !== null) {
@chmod($dstFile, $this->fileMode);
}
}
if ($this->appendTimestamp && ($timestamp = @filemtime($dstFile)) > 0) {
$fileName = $fileName . "?v=$timestamp";
}
return [$dstFile, $this->baseUrl . "/$dir/$fileName"];
}
protected string|false resolveAsset ( $bundle, $asset ) | ||
$bundle | yii\web\AssetBundle | |
$asset | string |
protected function resolveAsset($bundle, $asset)
{
if (isset($this->assetMap[$asset])) {
return $this->assetMap[$asset];
}
if ($bundle->sourcePath !== null && Url::isRelative($asset)) {
$asset = $bundle->sourcePath . '/' . $asset;
}
$n = mb_strlen($asset, Yii::$app->charset);
foreach ($this->assetMap as $from => $to) {
$n2 = mb_strlen($from, Yii::$app->charset);
if ($n2 <= $n && substr_compare($asset, $from, $n - $n2, $n2) === 0) {
return $to;
}
}
return false;
}
アセットコンバーターを設定します。
public void setConverter ( $value ) | ||
$value | array|yii\web\AssetConverterInterface |
アセットコンバーター。これは、yii\web\AssetConverterInterface を実装するオブジェクト、またはアセットコンバーターオブジェクトを作成するために使用できる設定配列のいずれかです。 |
public function setConverter($value)
{
$this->_converter = $value;
}
定義元: yii\base\Component::trigger()
イベントをトリガーします。
このメソッドはイベントの発生を表します。クラスレベルのハンドラーを含む、イベントにアタッチされたすべてのハンドラーを呼び出します。
public void trigger ( $name, yii\base\Event $event = null ) | ||
$name | string |
イベント名 |
$event | yii\base\Event|null |
イベントインスタンス。設定されていない場合は、デフォルトの yii\base\Event オブジェクトが作成されます。 |
public function trigger($name, Event $event = null)
{
$this->ensureBehaviors();
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($eventHandlers as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) {
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);
}
コメントするにはサインアップまたはログインしてください。