如何在 Yii2 的小部件中发布资产
How to publish an asset within a widget in Yii2
在 Yii 1 中,可以通过以下方式发布资产:
Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('ext.MyWidget.assets'));
如何在 Yii2 的小部件中发布资产?
在您的小部件视图中:
app\assets\AppAsset::register($this); // $this == the View object
检查the docs。
几乎相同:
Yii::$app->getAssetManager()->publish('/path/to/assets'); // you can use an alias
http://www.yiiframework.com/doc-2.0/yii-web-assetmanager.html#publish()-detail
但是如果你想发布css和js,最好创建一个资产包,在这里阅读更多:http://www.yiiframework.com/doc-2.0/guide-structure-assets.html#defining-asset-bundles
我已经在我的 BaseController.php
中实现了这个功能,它被我所有的控制器扩展了。 发布单个资产.
的函数
/**
* Publish an asset and return url
*
* @param $src
*
* @return mixed
*/
public function publishAsset( $src ) {
$path = Yii::getAlias( $src );
if ( ! $this->assetManager ) {
$this->assetManager = new AssetManager();
}
$return = $this->assetManager->publish( $path );
return $return[1];
}
我唯一要调整的是使包含完整的 URL 方案成为可能。我已经在这里
发布了我的问题
最简单的方法:
app\assets\AppAsset::register($this->getView());
这与在视图中发布它的方式相同。
问题中本案例的问题。
在 Yii2 中,AssetBandle 应该是唯一的,因为它避免了在网页上加载相同文件时出现重复。在 Yii1 中这是一个问题。
这里几乎所有的建议答案都没有解决这个问题。
为什么答案应该是这样的:
您应该使用唯一名称创建新资产包(yii\web\AssetBundle),以便在应用程序中使用的所有资产包中全局识别它。 fully qualified class name 将检查唯一名称。使用后如下:
YourAsset::register($view);
或
$view->registerAssetBundle(InterrogateDeviceButtonAsset::class);
在 Yii 1 中,可以通过以下方式发布资产:
Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('ext.MyWidget.assets'));
如何在 Yii2 的小部件中发布资产?
在您的小部件视图中:
app\assets\AppAsset::register($this); // $this == the View object
检查the docs。
几乎相同:
Yii::$app->getAssetManager()->publish('/path/to/assets'); // you can use an alias
http://www.yiiframework.com/doc-2.0/yii-web-assetmanager.html#publish()-detail
但是如果你想发布css和js,最好创建一个资产包,在这里阅读更多:http://www.yiiframework.com/doc-2.0/guide-structure-assets.html#defining-asset-bundles
我已经在我的 BaseController.php
中实现了这个功能,它被我所有的控制器扩展了。 发布单个资产.
/**
* Publish an asset and return url
*
* @param $src
*
* @return mixed
*/
public function publishAsset( $src ) {
$path = Yii::getAlias( $src );
if ( ! $this->assetManager ) {
$this->assetManager = new AssetManager();
}
$return = $this->assetManager->publish( $path );
return $return[1];
}
我唯一要调整的是使包含完整的 URL 方案成为可能。我已经在这里
最简单的方法:
app\assets\AppAsset::register($this->getView());
这与在视图中发布它的方式相同。
问题中本案例的问题。
在 Yii2 中,AssetBandle 应该是唯一的,因为它避免了在网页上加载相同文件时出现重复。在 Yii1 中这是一个问题。 这里几乎所有的建议答案都没有解决这个问题。
为什么答案应该是这样的:
您应该使用唯一名称创建新资产包(yii\web\AssetBundle),以便在应用程序中使用的所有资产包中全局识别它。 fully qualified class name 将检查唯一名称。使用后如下:
YourAsset::register($view);
或
$view->registerAssetBundle(InterrogateDeviceButtonAsset::class);