Сперва произведем декомпозицию задачи по разработке модуля загрузки изображения. Разобьём эту задачу на 7 простых шагов. Вот они:
1. Обновить composer
composer self-update
2. Установить зависимость intervetnion image
composer require intervention/image
3. В файле config/app.php добавить провайдер зависимости (после подключения зависимостей ядра, но до провайдеров приложения). Лучше всего это делать сразу после коментария Package Service Providers..:
Intervention\Image\ImageServiceProvider::class
В этом же файле добавить ссылку на фасад Image:
'Image' => Intervention\Image\Facades\Image::class
С прочими особенностями установки можно ознакомиться по адресу официальной документации пакета - http://image.intervention.io/getting_started/installation
4. В дирректории /app создать еще одну папку libs, в которой будут храниться вспомогательные классы приложения.
5. В папке libs создать файл Imap.php
Рассмотрим содержимое файла:
namespace App\Libs; use Image; use Auth; class Imag{ public function url($path = null, $dirrectory = null, $name = null){ if($path != null){ if($dirrectory != null){ $dir = public_path() . $dirrectory; }else{ if(!Auth::guest()){ $dir = public_path() . '/uploads/'. Auth::user()->id . '/'; }else{ $dir = public_path() . '/uploads/0/'; } if(!file_exists($dir)){ mkdir($dir, 0777, true); } } if($name != null){ $filename = $name; }else{ $filename = date('y_m_d_h_i_s').'.jpg'; } $img = Image::make($path); $img->resize(600, null, function ($constraint) { $constraint->aspectRatio(); }); $img->save($dir . $filename); $img->resize(300, null, function ($constraint) { $constraint->aspectRatio(); }); $pic_small = 's_'. $filename; $img->save($dir . $pic_small); $img->resize(100, null, function ($constraint) { $constraint->aspectRatio(); }); $pic_small2 = 'ss_'. $filename; $img->save($dir . $pic_small2); return $filename; }else{ return false; } } }
6. Далее необходимо подготовить форму с элементом input type="file" name="picture1"
.
Для самого тэга form необходимо добавить атрибут enctype="multipart/form-data"
7.Использование класса Imag в контроллере, обрабатывающем форму:
$pic = \App::make('\App\Libs\Imag')->url($_FILES['picture1']['tmp_name']);
Для связывания файлов (изображений, видео, аудио, текстовых и других форматов) с моделями Laravel можно воспользоваться модулем Spatie Laravel-medialibrary
Практика