Изображение в gridview в yii2

Как поместить изображение в GridView в yii2?У меня есть следующий код. Но его не отображение изображения, поскольку он не дает url-адреса изображения. Куда поместить url изображения?

 <?php echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yiigridSerialColumn'],

        'c_id',
        'name:ntext',
        'description:ntext',
        array(
                'format' => 'image',
               'attribute'=>'logo',

),

        ['class' => 'yiigridActionColumn'],
    ],
]); ?>

8 ответов


попробовать как

 array(
'format' => 'image',
'value'=>function($data) { return $data->imageurl; },

   ),

и в вашей модели,

public function getImageurl()
{
return \Yii::$app->request->BaseUrl.'/<path to image>/'.$this->logo;
}

Не знаю, правильный это путь или нет.Но для меня это работает.


используйте этот:

   [
        'attribute' => 'image',
        'format' => 'html',    
        'value' => function ($data) {
            return Html::img(Yii::getAlias('@web').'/images/'. $data['image'],
                ['width' => '70px']);
        },
    ],

Yii 2 имеет встроенный помощник для создания URL-адресов. Вы также можете указать url-адрес изображения по пути (передав второй параметр $scheme).

поэтому я рекомендую использовать этот:

GridView:

use yii\helpers\Url;

[
    'format' => 'image',
    'value' => function ($model) {
        return $model->getImageUrl(); 
    },
],

модель:

public function getImageUrl()
{
    return Url::to('@web/path/to/logo/' . $this->logo, true);
}

вид->изображения->индекс.в PHP

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,

        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
             [
             'attribute'=>'image_path',
            'label'=>'Image',
            'format'=>'html',
            'content' => function($data){
                $url = $data->getParentName();
                return Html::img($url, ['alt'=>'yii','width'=>'250','height'=>'100']);
                        }
            ],
            'caption1',
            'caption2',
            'status',
            ['class' => 'yii\grid\ActionColumn'],
        ],
        'tableOptions' =>['class' => 'table table-striped table-bordered'],

    ]); ?>

модель->изображения

 public function getParent()
    {
        return $this->hasOne(Image::className(), ['image_id' => 'image_id']);
    }
    public function getParentName()
    {
        $model=$this->parent;
        return $model?$model->image_path:'';
    }

атрибуты таблицы, image_id, image_path, caption1, caption2, status


я использовал формат " raw " для этого типа работы.

[
    "attribute": "image",
    "format": "raw",
    "value": function($model){
        return ($model->image) ? Html::img("/path-to-img-location" . $model->image) : false;
    }
]

если изображение существует, то изображение отображается иначе оно пустое.


вы можете попробовать это:

 <?= GridView::widget
                ([
                    'dataProvider' => $dataProvider,
                     'filterModel' => $searchdata,
        'columns' => [
                      [
                         'attribute' => 'logo',
                         'format' => 'html',
                         'label' => 'Image',
                         'value' => function ($data) {
                                    return Html::img('/advanced/hello/frontend/web/image/' . $data['logo'],
                                    ['width' => '80px',
                                     'height' => '80px']);
                                   },
                     ],
                    ],
                 ]);
        ?>

вы также можете использовать:

public function getImageurl()
{
  return \Yii::$app->urlManager->createUrl('@web/path/to/logo/'.$this->logo);
}

' @web - это предопределенные псевдонимы пути.

'urlManager->CreateUrl()' сделайте что-то большее, чем разрешение псевдонимов.


это просто вы можете просто объявить его в индексном файле, как показано ниже.

[
            'label' => Your Label Here',  
            'format' => 'raw',   
            'value' => function ($data) {
                 $images = '';

                $images = $images.Html::img(\Yii::$app->request->BaseUrl.'/your-path-here/'.$date->getImagefilename(),['alt'=>'','width'=>'30','height'=>'30', 'data-toggle'=>'tooltip','data-placement'=>'left','title' => $name->pictogram_comment ,'style'=>'cursor:default;']);
                return ($images);

            }
            ],

вам нужно будет получить экземпляр изображения из вашей модели. Если требуется пример, пожалуйста, прокомментируйте, вернетесь к этому.