我根据通过vendor/
目录中的composer安装的JS插件(DataTables)制作资产包。资产包类文件如下所示:
<?php
namespace app\assets;
use yii\web\AssetBundle;
class DatatablesAsset extends AssetBundle
{
public $sourcePath = '@vendor/datatables/datatables/media';
public $css = [
'css/jquery.dataTables.min.css',
];
public $js = [
'js/jquery.dataTables.js',
];
public $publishOptions = [
'forceCopy' => true,
];
public $depends = [
'yii\web\YiiAsset',
];
}
这很好用。这些文件从供应商目录复制,并发布到web/assets/[hash]
目录。
但是,我想使用CSS文件进一步设置datatables插件的样式,但仍然希望使用基本插件中包含的图像。由于我不知道发布到[hash]
目录的目录assets
我无法访问这些图像,我该如何解决?
assets/[hash]
目录吗?然后我可以使用相对路径(就像插件本身一样)。这听起来像是最优雅的解决方案。[hash]
并在我的自定义CSS文件中引用它吗?答案 0 :(得分:3)
您正在寻找
<link rel="icon" type="image/ico" href="<?=Yii::$app->assetManager->getPublishedUrl('@vendor/xxxx/yyyyy/assets')?>/xxx/yyy/fav.ico">
或者,如果包具有它自己的别名,您可以使用
<link rel="icon" type="image/ico" href="<?=Yii::$app->assetManager->getPublishedUrl('@pachageName/assets')?>/xxx/yyy/fav.ico">
答案 1 :(得分:0)
您可以使用bundle对象获取带有哈希值的路径,并在资产文件夹中附加文件的相对路径。
资产到达registered某处($this
是视图对象):
$asset = $this->registerAssetBundle(DatatablesAsset::class);
// or alternatively
$asset = DatatablesAsset::register($this);
然后,您可以在视图文件中使用base url(包括哈希)
<img src="<?= $asset->baseUrl . '/images/image.jpg' ?>">
$ js和$ css中列出的相关资产文件的基本URL 。
如果设置了$ sourcePath,则此属性将被覆盖。 yii \ web \ AssetManager从以下位置发布资产文件时 $ sourcePath。