Yii2:从文件夹常见显示图像

时间:2015-07-10 02:36:48

标签: image yii2

我想在视图中显示常用文件夹中的图片,但是没有显示。

我的代码是:

<img src="<?= Yii::$app->request->baseUrl . '/common/web/img/ava.jpg' ?>" class=" img-responsive" >

它生成为<img src="/simdsm/common/web/ava.jpg" class=" img-responsive">但图像不会出现。

如何解决?

3 个答案:

答案 0 :(得分:2)

如果使用高级应用程序模板,则应将图像放在这些可通过Web访问的文件夹中frontend/webbackend/web

通常我也会创建从frontend/web/imagesbackend/web/images的别名,以便从前端显示后端的图片。

您提到的不是Web可访问目录。

从此类目录发布图像的替代方法是为该文件夹创建资产包,这样就可以在frontend/web/assets中复制图像。您可以在official docs中了解有关资产包的更多信息。

答案 1 :(得分:0)

我们可以通过以下简单步骤轻松完成 在common / config / params-local.php

Yii::setAlias('@imageurl', 'http://localhost/project_name/backend/web/');

在上面的示例中,我的图片位于backend / web / images / product_images

在前端,我越来越喜欢

<img src="<?php echo Yii ::getAlias('@imageurl'); ?>/images/product_images/<?= $product['image']?>" alt=" " class="img-responsive" />

它只是为我工作...

答案 2 :(得分:0)

因为没有人实际发布过使用资产访问后端文件夹中保存的文件的示例,或者相反,所以非常简单:

假设您正在使用yii高级模板,并且有一个backup/web/uploads/文件夹,用于保存通过后端上传的图像。现在,您想在前端显示这些图像。由于Frontend-App和Backend-App是两个独立的应用程序,因此它们彼此之间并不了解。

您在frontend/assets/中创建新资产,我们将其称为 BackendAsset.php

<?php

   namespace frontend\assets;
   use yii\web\AssetBundle;

   class BackendAsset extends AssetBundle {
      public $sourcePath = '@backend/web/uploads';
   }

其中$sourcePath是您要在前端访问的后端文件夹(源)。 @backend别名为predefined in the advanced template,因此我们将使用它。

现在,在我们看来,我们可以简单地使用BackendAsset:

<?php

    use frontend\assets\BackendAsset;
    $backend = BackendAsset::register($this);

?>

现在我们可以轻松地显示文件了,例如backend/web/uploads/somefile.jpg

<img src="<?= $backend->baseUrl . '/somefile.jpg' ?>" >

注意:以这种方式使用资产将所有文件backend/web/uploads复制到前端的资产文件夹中。为防止这种情况,您可以告诉应用程序不要复制文件,而要链接到文件(创建SymLink),而不使用linkAssets({{3 }}):

在您的应用配置(在本例中为frontend/config/main.php)中,将linkAssets参数设置为 TRUE

'components' => [
    'assetManager' => [
        'linkAssets' => true,
        ]
    ]