【问题标题】:Laravel - Backpack multi images showing on front-endLaravel - 在前端显示的背包多图像
【发布时间】:2020-10-05 12:01:48
【问题描述】:

我正在为我的 Laravel 项目使用 Backpack。这是我的图片上传代码: 我的ImageCrudController

public function setup()
    {
        /*
        |--------------------------------------------------------------------------
        | CrudPanel Basic Information
        |--------------------------------------------------------------------------
        */
        $this->crud->setModel('App\Models\Image');
        $this->crud->setRoute(config('backpack.base.route_prefix') . '/image');
        $this->crud->setEntityNameStrings('image', 'images');

        $this->crud->setColumns(['images']);
        $this->crud->addField([
            'name' => 'images',
            'label' => 'Images',
            'type' => 'upload_multiple',
            'upload' => true,
            //s'disk' => 'uploads' // if you store files in the /public folder, please ommit this; if you store them in /storage or S3, please specify it;
        ]);

        /*
        |--------------------------------------------------------------------------
        | CrudPanel Configuration
        |--------------------------------------------------------------------------
        */

        // TODO: remove setFromDb() and manually define Fields and Columns
        //$this->crud->setFromDb();

        // add asterisk for fields that are required in ImageRequest
        $this->crud->setRequiredFields(StoreRequest::class, 'create');
        $this->crud->setRequiredFields(UpdateRequest::class, 'edit');
    }

这是我的App\Models\Image 模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Backpack\CRUD\CrudTrait;

class Image extends Model
{
    use CrudTrait;

    /*
    |--------------------------------------------------------------------------
    | GLOBAL VARIABLES
    |--------------------------------------------------------------------------
    */

    protected $table = 'images';
    protected $primaryKey = 'id';
    // public $timestamps = false;
    // protected $guarded = ['id'];
    protected $fillable = ['images'];
    // protected $hidden = [];
    // protected $dates = [];

    /*
    |--------------------------------------------------------------------------
    | FUNCTIONS
    |--------------------------------------------------------------------------
    */

    public function setImagesAttribute($value)
    {
        $attribute_name = "images";
        $disk = config('backpack.base.root_disk_name');;
        $destination_path = "public/uploads";

        $this->uploadMultipleFilesToDisk($value, $attribute_name, $disk, $destination_path);

    // return $this->{$attribute_name}; // uncomment if this is a translatable field
    }

    protected $casts = [
        'images' => 'array'
    ];

}

现在我正试图在我的前端显示这些图像。只是显示该帖子的所有图像或显示数组中的[0] 图像。这是我的代码:

@foreach($images as $image)
   @foreach (json_decode($image->images) as $photo)
      <img src="uploads/{{$photo}}" style="width:50%" />
   @endforeach
@endforeach

但它向我显示了这个错误:

json_decode() expects parameter 1 to be string, array given

我做错了什么?

【问题讨论】:

    标签: javascript php json laravel laravel-backpack


    【解决方案1】:

    我不确定,但我认为您不需要使用 json_decode 模型中的 images 属性已经转换为数组。

    所以你可以尝试循环 $image->images 因为它已经是一个数组

    【讨论】:

      【解决方案2】:

      两件事:

      1- 你不需要 json_decode() 2-我认为(根据您提供的内容)您应该替换

      @foreach($images as $image)
         @foreach (json_decode($image->images) as $photo)
            <img src="uploads/{{$photo}}" style="width:50%" />
         @endforeach
      @endforeach
      

      @foreach($images as $image)
        <img src="uploads/{{$image}}" style="width:50%" />
      @endforeach
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多