如何将文件添加到Yii2中供应商目录中具有$ sourcePath的资产?

时间:2014-10-21 13:25:53

标签: assets yii2

我根据通过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我无法访问这些图像,我该如何解决?

  • 我可以将$ sourcePath外部的CSS文件添加到assets/[hash]目录吗?然后我可以使用相对路径(就像插件本身一样)。这听起来像是最优雅的解决方案。
  • 我可以以某种方式知道[hash]并在我的自定义CSS文件中引用它吗?

2 个答案:

答案 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。