Модель с полями с изображениями
Если вы хотите использовать столбец с изображением или поле загрузки изображения в SleepingOwl Admin вы должны подготовить вашу модель:
- Добавьте интерфейс
SleepingOwl\Models\Interfaces\ModelWithImageFieldsInterfaceв вашу модель. - Добавьте трэйт
SleepingOwl\Models\Traits\ModelWithImageOrFileFieldsTrait(если ваша модель расширяетSleepingOwlModelвам не нужно это делать). - Добавьте метод
public function getImageFields().
Пример
<?php
use SleepingOwl\Models\Interfaces\ModelWithImageFieldsInterface;
use SleepingOwl\Models\Traits\ModelWithImageOrFileFieldsTrait;
class Monument extends \Eloquent implements ModelWithImageFieldsInterface
{
use ModelWithImageOrFileFieldsTrait;
public function getImageFields()
{
return [
'image' => 'monuments/',
'photo' => '',
'other' => ['other_images/', function($directory, $originalName, $extension)
{
return $originalName;
}]
];
}
}
Указание полей с изображениями
getImageFields() должен возвращать массив, ключи которого — название полей с изображениями, а значения — пути к директории, где будут храниться изображения, относительно imagesDirectory (смотрите конфигурация).
Если путь пуст, изображения будут храниться в imagesDirectory.
Произвольная функция именования файлов
Значения в массиве могут быть типа string или array:
string— директория для загрузки изображений, имя файла будет сгенерировано случайно.array— первый элемент массива будет директорией для загрузки изображений, второй элемент должен быть функцией, возвращающей название файла (function($directory, $originalName, $extension){}).$directory— абсолютный путь к директории загрузки$originalName— исходное название загруженного файла$extension— расширение загруженого файла
Изменение изображения при загрузке
Вы можете изменять загружаемое изображение, добавив метод setImage($field, $image) в вашу модель:
public function setImage($field, $image)
{
parent::setImage($field, $image);
$file = $this->$field;
if ( ! $file->exists()) return;
$path = $file->getFullPath();
// вы можете использовать возможности пакета Intervention Image для изменения изображения
Image::make($path)->resize(10, 10)->save();
}
Использование поля с изображением
Доступ к полю вашей модели
$monument->image
вернет объект класса SleepingOwl\Models\Attributes\Image.
Вы можете использовать
$monument->image->thumbnail('original')
для получения полного адреса к изображению с оригинальным размером.
Вы можете создать собственные шаблоны создания миниатюр в app/config/packages/intervention/imagecache/config.php. Подробнее смотрите в документации Intervention Imagecache.