如何在Yii2中的小部件中发布资产

如何在Yii2中的小部件中发布资产,yii2,Yii2,在Yii 1中,可以发布具有以下内容的资产: Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('ext.MyWidget.assets')); 如何在Yii2中发布小部件中的资产?在您的小部件视图中: app\assets\AppAsset::register($this); // $this == the View object 检查。几乎相同: Yii::$app->getAssetManager()

在Yii 1中,可以发布具有以下内容的资产:

Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('ext.MyWidget.assets'));

如何在Yii2中发布小部件中的资产?

在您的小部件视图中:

app\assets\AppAsset::register($this); // $this == the View object
检查。

几乎相同:

Yii::$app->getAssetManager()->publish('/path/to/assets'); // you can use an alias


但是,如果您想发布css和js,最好创建一个资产包,请在此处阅读更多内容:

我已经在我的
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中,AssetHandle应该是唯一的,因为它避免了在网页上加载相同文件时的重复。在Yii1中,这是一个问题。 这里几乎所有的建议答案都不能解决这个问题

这就是为什么答案应该是这样的:

您应该创建新的资产捆绑包(yii\web\AssetBundle),该资产捆绑包的唯一名称在应用程序中使用的所有资产捆绑包中全局标识。唯一名称将由检查。使用后如下:

YourAsset::register($view); 


嗯,我试过了,但是没有效果。。。资产管理器如何知道哪些资产连接到视图?@slaver113,因为新资产绑定没有唯一的名称
 $view->registerAssetBundle(InterrogateDeviceButtonAsset::class);