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

时间:2015-01-06 17:23:54

标签: yii2

在Yii 1中,可以使用以下内容发布资产

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

如何在Yii2中的窗口小部件中发布资源?

6 个答案:

答案 0 :(得分:3)

在您的小部件视图中:

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

检查the docs

答案 1 :(得分:2)

感谢您的帮助,这是解决问题的最终代码:

list($path, $webPath) = Yii::$app->getAssetManager()->publish(__DIR__."/assets);
$this->getView()->registerJsFile($webPath);

答案 2 :(得分:2)

最简单的方法:

app\assets\AppAsset::register($this->getView());

这与您在视图中发布它的方式相同。

答案 3 :(得分:1)

几乎相同:

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

答案 4 :(得分:1)

问题中此案例的问题。

在Yii2中,AssetBandle应该是唯一的,因为它可以避免在加载网页上的相同文件时出现重复。在Yii1这是一个问题。 这里几乎所有建议的答案都没有解决这个问题。

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

您应创建新的资产包(yii \ web \ AssetBundle),其唯一名称可在应用程序中使用的所有资产包中全局标识它。 fully qualified class name将检查唯一名称。使用后遵循:

YourAsset::register($view); 

 $view->registerAssetBundle(InterrogateDeviceButtonAsset::class);

答案 5 :(得分:-1)

我已经在我的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方案。我在Yii2 AssetManager published path include URL scheme

发布了我的问题
相关问题