Laravel 5.5: добавьте URL к объекту json, чтобы сохранить несколько изображений - PullRequest
1 голос
/ 27 мая 2019

Мне нужно сохранить несколько фотографий с помощью Laravel.Изображения хранятся отдельно на диске, а ссылки на места хранятся в файле JSON в базе данных.Таким образом, у каждого пользователя есть столбец в базе данных с:

{"images": ["/user/57/house-11-1.png", "/use/57/house-12-2.png"]}

Поэтому, когда пользователь загружает файл и нажимает на кнопку сохранения, происходит следующий код:

    $path = $this->processImage($request, $user->id, $house->id);
    /* uploads the image to the server and pass path of the image*/
    if ($path) {
        $jsonstring = $house->images;
        dd($jsonstring);
        $arr = json_decode($jsonstring);
        $arr['images'] = [$path];
        $json = json_encode($arr);
        dd($json);
        $house->images = $json;
        $house->save();
    }

Используемая модель laravelназывается userHouse и сохраняет изображения как:

class userHouse extends Model implements Changeable
{
    protected $casts = [
        'images' => 'array',
    ];
...
}

processImage функция:

private function processImage($request, $userID, $houseId)
{
    $path = null;
    $number = rand(1, 99);
    if ($request->hasFile('image')) {
        $image = Image::make($request->file('image'))
            ->resize(750, null, function ($constraint) {
                $constraint->aspectRatio();
            })
            ->encode('png');
        $path = "/vendors/{$userID}/horse-{$houseId}-{$number}.png";
        Storage::disk('fileadmin')->put($path, $image->encoded);
    }

    return $path;
}

я получаю ошибку:

[2019-05-27 08:01:15] local.ERROR: Serialization of 'Illuminate\Http\UploadedFile' is not allowed {"userId":57,"email":"info@test.com","exception":"[object] (Exception(code: 0): Serialization of 'Illuminate\\Http\\UploadedFile' is not allowed at /Users/dsfsdf/ah-website/user/laravel/framework/src/Illuminate/Session/Store.php:128)
[stacktrace]

Как я могу добавить URLв строку JSON в базе данных?Загрузка отдельных изображений работает.

1 Ответ

0 голосов
/ 27 мая 2019

Я могу подумать, что метод processImage не может обрабатывать несколько загруженных файлов в запросе.

Кроме того, IMO, этот метод должен фактически получать объект UploadedFile вместо всего запроса.

Итак, код будет похож на:

$images = $house->images;

foreach ($request->images as $uploadedFile) {
    $images[] = $this->processImage($uploadedFile, $user->id, $house->id);
}

$house->images = $images;
$house->save();

Кроме того, если вы определили атрибут images как массив в модели, нет необходимости декодировать / кодировать его, как это делает laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...