Модель с полями с изображениями
Если вы хотите использовать столбец с изображением или поле загрузки изображения в 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.