如何在 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);