Yii2 AssetManager 发布路径包含 URL 方案

Yii2 AssetManager published path include URL scheme

在我的控制器中,我实现了发布单个资产(例如图像)的功能,并且 return URL:

/**
 * 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];
}

然后在我看来这样调用它:

<?= $this->context->publishAsset('@app/assets/img/logo.png') ?>

工作正常,但函数 return 是已发布的 URL,前面没有 'scheme'。 例如它 returns /assets/7cf54cf2/img/logo.png 而不是 http://www.example.com/assets/7cf54cf2/img/logo.png

如何使用 AssetManager 或调整我的代码才能获得完整的 URL? 我在文档中找不到答案,到目前为止我想出的唯一解决方案是在 returning.

之前手动将其添加到前面

我在尝试使用此功能为电子邮件生成 HTML 时遇到了这个问题。当然e-mails中的URLs必须包含前面的scheme

除了我还有什么建议吗?谢谢!

尝试使用 url 助手

use yii\helpers\Url;

$publishedPath = $this->assetManager->publish( $path );
   return (Url::to($publishedPath[1], true));

您是否介意展示您的解决方案,您如何获得用于链接 css 和 js 文件的绝对路径?

我的解决方案是:

\Yii::setAlias('@web', Url::base(true));
\Yii::$app->assetManager->baseUrl = Yii::getAlias('@web/assets');