Загрузка изображения в Laravel

Загрузка изображение через Laravel выглядит так:

(Создаем модель, контроллер. Это, наверняка понятно.)
(Также устанавливаем дополнение composer require laravelcollective/html)

Перед всем этим действием без лишних вопросов выполяем команду

php artisan storage:link

В Blade шаблоне прописываем {{Form::file('main_image')}}

В методе store / save такую конструкцию:

// Проверка, хотя можно обойтись и без нее
$this->validate($request, [
  'main_image' => 'image|nullable|max:1999',
]);

// Если есть файл
if( $request->hasFile('main_image')){
  // Имя и расширение файла
  $filenameWithExt = $request->file('main_image')->getClientOriginalName();
  // Только оригинальное имя файла
  $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
  // Расширение
  $extention = $request->file('main_image')->getClientOriginalExtension();
  // Путь для сохранения
  $fileNameToStore = "main_image/".$filename."_".time().".".$extention;
  // Сохраняем файл
  $path = $request->file('main_image')->storeAs('public/', $fileNameToStore);
}

// При выводе файла на странице нудно будет прибавить в начале "storage/"
$fileNameToStore . "storage/";

Загрузка нескольких изображений

Схема будем немного отличаться.

В Blade шаблоне прописываем {{Form::file('images[]', ['multiple'])}}

В методе store / save

// ...
$deal_item = Deal::find($id); // Наша модель

$this->validate($request, [
  'main_image.*' => 'image|nullable|max:1999',
]);

// Обрабатываем несколько фотографий
if($request->hasFile('images'))
{
  $images = $deal_item->images;
  $files = $request->file('images');
  foreach ($files as $file) {
    $extention = $file->getClientOriginalExtension();
    $fileNameToStore = 'deals/' . $deal_item->id . '/images/'.sha1_file($file).".".$extention;
    $path = $file->storeAs('public', $fileNameToStore);
    $images[] = "/storage/".$fileNameToStore;
  }
  $deal_item->images = $images;
}

В модель добавим преобразователь:

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

Вот и все. Получилось? Все понятно? Только запутал? Напиши в комментах.

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

[MODx] Генератор настроек MIGX

[MODx, MIGx] Документация на русском по MIGX

[MODX] Импорт и экспорт в MiniShop2. Реализация 1

[JS] Маска для ввода телефона +7(___)___-__-__

[MODx] minishop2 tips

Как включить HTTPS (SSL) в MODX - Подробная инструкция

[MODx, miniShop2] Генерация YML для выгрузки в маркет

[MODx] Подсказки по API

[OpenCart] Вывести на главную все категории с картинками

[MODx] Сайт на обслуживании (выключить сайт)

[MODx, MIGX] Примеры использования

[PHP, JSON] Пример перевода с помощью Yandex Translate API

Расширение свойств товаров minishop2

Универсальная форма обратной связи — feedBackForm

jQuery.Maskedinput js - документация на русском с примерами

[MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

[Opencart] Вернуть английский язык, если вы его удалили

[OpenCart] Вывести модуль напрямую через контроллер

[MODX, MIGX] Вывести getImageList только если он не пустой

[MODx, Quip] Более рабочий вариант.

[MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

[MODX, MiniShop2] Примеры выборки where, optionFilters, innerJoin

[MODX] pThumb - ресайз изображений. Примеры использования.

Красивое адаптивное меню под pdoMenu

Отключить автозаполнение input

Все записи

Добавьте такую строчку на свой сайт за 2 минуты по инструкции
Наш сайт использует куки, нажмите «ОК» если вы не против
OK