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');
在我的控制器中,我实现了发布单个资产(例如图像)的功能,并且 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');