У меня проблемы с проверкой размеров изображения в 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, используя путь?
Я решил эту проблему, добавив пользовательский метод проверки и родной 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',
Других решений пока нет …