Backpack CRUD: Как проверить размеры изображения, загруженного с помощью elFinder?

У меня проблемы с проверкой размеров изображения в Backpack для laravel.

В моем Backpack CRUD я добавляю поле для загрузки фотографий с помощью elFinder, например:

$addFields = [
[
'name' => 'photo',
'label' => 'Header Photo (1500 x 1000 EXACTLY)',
'type' => 'browse'
]
]

В своем запросе я использую следующее правило для проверки размера изображения:

public function rules()
{

return [
'photo' => 'dimensions:width=1500,height=1000'
];
}

Независимо от того, какие атрибуты измерения я пробую, проверка не пройдена. Я пробовал такие вещи, как max_width выше размеров файла теста.

Моя теория заключается в том, что валидатор ищет фактическое поле «файл» для передачи в сообщении, но elFinder передает путь к файлу, который был загружен.

Любые идеи о том, как обрабатывать проверку размера изображения в Laravel, используя путь?

0

Решение

Я решил эту проблему, добавив пользовательский метод проверки и родной PHP getimagesize функция для проверки с использованием пути, предоставленного правилом.

Создайте пользовательский тип проверки

В app/Providers/AppServiceProvider.php:

Включить класс валидатора:

use Illuminate\Support\Facades\Validator;

Внутри boot() функция в AppServiceProvider.php добавлять:

    Validator::extend('header_image', function($attribute, $value, $parameters, $validator) {

$path = public_path();
$photo = "$path/$value";
list($width,$height) = getimagesize($photo);
// $parameters[0] = width
// $parameters[1] = height
if ($width != $parameters[0] || $height != $parameters[1]) {
return false;
}else{
return true;
}

});

Теперь я могу использовать header_image в качестве типа проверки и передайте ограничения ширины / высоты в качестве параметров:

'photo' => 'header_image:1500,1000',

0

Другие решения

Других решений пока нет …