如何使用 Yii2 DetailView 在后端渲染前端图像?

How to render an frontend image in backend using Yii2 DetailView?

我想 render/show 在 后端 上的视图中显示图像,但图像位置在 frontend/web/uploads.

我试过在 DetailView::widget() 上这样做:

...
[
    'attribute'=>'image',
    'value'=>('/frontend/web/uploads/'.$model->image),
    'format' => ['image',['width'=>'100','height'=>'100']],
],

但是图片没有显示。有帮助吗?

是的,可以访问 frontend/web/uploadsbackend 查看。

先在backend->config->main.php里加urlManagerFrontend

'components' => [
    'urlManagerFrontend' => [
        'class' => 'yii\web\urlManager',
        'baseUrl' => 'frontend/web/', //Access frontend web url
    ],
],

然后访问frontend/web/backend喜欢

Yii::$app->urlManagerFrontend->baseUrl.'/uploads/your_image.jpg'

在DetailView::widget喜欢

[
   'attribute'=>'image',
   'value'=> function ($model) {
        return Html::img(Yii::$app->urlManagerFrontend->baseUrl.'/uploads/'.$model->image, ['alt' => 'No Image', 'width' => '10px', 'height' => '10px']);
   },
   'format' => 'raw',
],

如果这是您从后端链接到前端的唯一位置,最简单的方法是在后端配置中定义别名:

Yii::setAlias('@frontendUploads', 'https://repasca.devs/uploads');

并使用此别名构建文件 URL:

[
    'attribute' => 'image',
    'value' => Yii::getAlias('@frontendUploads') . '/' . $model->image,
    'format' => ['image', ['width' => '100', 'height' => '100']],
],