Yii2 不注册资源包如何发布资源?

比如下面这个资源包:

<?php
namespace frontend\assets;

use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{
    public $sourcePath = '@frontend/web';
    public $css = [
        'css/site.css',
    ];
    public $js = [];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

当使用AppAsset::register($this);注册这个资源包的时候,会将@frontend/web整个目录复制到可以访问的assets目录下。

但是,这种方法是直接复制整个目录,虽然正常引用了需要的css和js文件,但是不能访问里面的图片等资源。

那么,我们怎么使用资源包路径里的图片呢?

方法一(已弃用):

$url = Yii::$app->assetManager->getBundle(AppAsset::className())->baseUrl;

$this->registerCssFile($url . '/main.css');

echo Html::img($url . '/logo.png', ['title' => 'LOGO']);

方法二:

list(,$url) = Yii::$app->assetManager->publish('@mdm/admin/assets');

$this->registerCssFile($url . '/main.css');

echo Html::img($url . '/logo.png', ['title' => 'LOGO']);

publish($path, $options = [])方法将指定的目录或文件复制到一个web可以访问的位置,并返回一个数组,该数组有两个值:第一个值是该目录被复制后绝对路径,第二个值是相对路径,比如:

[
    '\www\advanced\web\assets\d8412495',
    '/assets/d8412495'
];