Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Уважаемые Laravel'чане, доброе время суток! Мне нужна Ваша помощь.
Я принимаю данные от пользователя, в том числе avatar ( картинку ), соответственно в $rules я создал правило для валидации изображений:
$rules = [
"avatar" => "image"
// какие-то ещё правила
]
...
Валидатор ругается, если пользователь загрузил НЕ картинку, например архив или текстовый файл. Если всё ОК, создается папка в которую помещается изображение и выводится сообщение "Вы успешно обновили аватар". С задаче валидатор справился.
Но, если вместо картинки отправить .exe файл, то валидатор НЕ ругается и программа выводит сообщение "Вы успешно обновили аватар". Проверяю папку, вдруг туда поместился данные .exe файл и ууух, слава богам туда ничего не прилетело.
В любом случае это очень волнует. Почему на остальные файлы правило "avatar" => "image" идеально срабатывает, а для .exe нет? Кто нибудь сталкивался с этим? Просто я ОЧЕНЬ хотел бы использовать то, что дает Laravel. Здесь я думал все будет просто ведь всё как бы очевидно, "avatar" => "image" значит нас интересуют только изображения. Неужели придется прибегать все же к созданию собственного правила для валидации? Боюсь не справлюсь с этим ...
Благодарю тех, кто сможет помочь!
Ограничьте ввод ещё и указанием mime-типов:
'avatar' => 'mimes:jpeg,bmp,png'
Не в сети
Я забыл про это написать. Да, именно так я и пробовал тоже, но все по прежнему. Какие могут быть еще варианты? Почему с .exe немного иначе ситуация обстоит? Почему на .exe не ругается валидатор ...
Не в сети
Я думаю проблема конкретно в вашей реализации. Если делали кастомные ошибки, возможно что-то не туда вписано.
На все не картинки дефолтная ошибка "The image must be an image".
Route::post('upload', function()
{
$image = Input::file('image');
$validator = Validator::make(['image' => $image], ['image' => 'image']);
if ( $validator->fails() )
{
return Response::make($validator->messages()->first());
}
$upload = $image->move(public_path().'/uploads', $image->getClientOriginalName());
if( $upload )
{
return Response::make('success');
}
return Response::make('error');
});
Я думаю проблема конкретно в вашей реализации. Если делали кастомные ошибки, возможно что-то не туда вписано.
На все не картинки дефолтная ошибка "The image must be an image".
Route::post('upload', function() { $image = Input::file('image'); $validator = Validator::make(['image' => $image], ['image' => 'image']); if ( $validator->fails() ) { return Response::make($validator->messages()->first()); } $upload = $image->move(public_path().'/uploads', $image->getClientOriginalName()); if( $upload ) { return Response::make('success'); } return Response::make('error'); });
Огромное Вам спасибо !!! Моя проблема решена! Я когда-то нуждался в выводе всех ошибок, которые были найдены валидатором, мне нужно было их выводить все. И я написал простую функцию, внутри которой я пользовался валидатором и возвращал массива в ошибками. Ровно до этого момента все выводилось здорово. Дошел до работы с изображениями и вот ... В общем теперь не буду писать велосипеды. Спасибо Вам, я очень рад ) Это мне урок.
Не в сети