我在 common 文件夹中有一张图片,我想在视图中显示它,但它没有显示。
我的代码是:
<img src="<?= Yii::$app->request->baseUrl . '/common/web/img/ava.jpg' ?>" class=" img-responsive" >
Run Code Online (Sandbox Code Playgroud)
它已生成,<img src="/simdsm/common/web/ava.jpg" class=" img-responsive">但图像未出现。
如何修复它?
由于没有人实际发布使用资产访问保存在后端文件夹中的文件的示例,或者相反,所以它非常简单:
假设您正在使用 yii 高级模板,并且您有一个backup/web/uploads/文件夹,用于保存通过后端上传的图像。现在您想在前端显示这些图像。由于前端应用程序和后端应用程序是两个独立的应用程序,因此它们彼此不认识。
您在您的 中创建一个新资产frontend/assets/,我们将其称为BackendAsset.php:
<?php
namespace frontend\assets;
use yii\web\AssetBundle;
class BackendAsset extends AssetBundle {
public $sourcePath = '@backend/web/uploads';
}
Run Code Online (Sandbox Code Playgroud)
$sourcePath您想要在前端访问的后端文件夹(源)在哪里。@backend 别名是在高级模板中预定义的,因此我们将使用它。
现在我们认为我们可以简单地使用 BackendAsset:
<?php
use frontend\assets\BackendAsset;
$backend = BackendAsset::register($this);
?>
Run Code Online (Sandbox Code Playgroud)
现在我们可以轻松地显示一个文件,比方说backend/web/uploads/somefile.jpg:
<img src="<?= $backend->baseUrl . '/somefile.jpg' ?>" >
Run Code Online (Sandbox Code Playgroud)
注意:以这种方式使用资源会将所有文件从 复制backend/web/uploads到前端的资源文件夹中。为了防止这种情况,您可以告诉您的应用程序不要复制文件,而是使用(yii2 docu )链接到它们(创建符号链接) :linkAssets
在您的应用程序配置中(在本例中frontend/config/main.php),将linkAssets参数设置为TRUE:
'components' => [
'assetManager' => [
'linkAssets' => true,
]
]
Run Code Online (Sandbox Code Playgroud)