Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Laravel 5.6.12
PHP 7.1.11
Хостинг не поддерживает REST-запросы(PUT,DELETE), только get и post
В общем, не получается провести проверку файла на изображение
есть ModelRequest
class ModelRequest extends FormRequest {
protected $rules = [
'image_primary' => 'required|image',
'image_secondary' => 'nullable|image',
...
];
protected $messages = [
'image_primary.required' => 'Не выбрано основное изображение',
'image_primary.image' => 'Файл основного изображения не является изображением',
'image_secondary.image' => 'Файл дополнительного изображения не является изображением',
...
];
public function authorize() {
...
}
public function rules() {
return $this->rules;
}
public function messages() {
return $this->messages;
}
}
Этот файл работает как часы
Есть ModelUpdateRequest который наследует ModelRequest:
class ModelUpdateRequest extends ModelRequest {
public function rules() {
$this->rules['image_primary'] = 'nullable|image';
return $this->rules;
}
public function messages() {
return $this->messages;
}
}
По сути он только переопределяет значение image_primary в массиве rules. И не хочет проводить валидацию, всегда выдает ошибку валидации, якобы загружаемый jpg не является изображением. Пробовал сменить правило с image на mimetypes:image/*, результат тот же. Что самое интересное, это не единственный наследующий FormRequest с валидацией на изображение, но единственный неработающий...
Не в сети
хз, я сам в методе загрузки изображения, фигачу валидацию.
$imageTypeArray = array(0 => 'UNKNOWN', 1 => 'GIF', 2 => 'JPEG', 3 => 'PNG', 4 => 'BMP');
$imageinfo = getimagesize($_FILES['file']['tmp_name'][0]);
if (isset($imageinfo['mime'])) {
foreach ($imageTypeArray as $key => $val) {
if ($imageinfo[2] == $key) {
$succs_file = true;
}
}
}
if (isset($succs_file)) { бла бла бла
The End =)
так же можно подавать целую пачку файлов и проверять каждый на изображение и брать только изображение.
было бы интересно услышать правильное решение
Не в сети
Костыли конечно можно наваять, но хочется все по фен-шую, что бы потом в случае необходимости долго не чесать голову.
По теме нашел подобный вопрос, но не особо понял решение...
https://laracasts.com/discuss/channels/ … -51-and-52
Не в сети
я тоже плохо понимаю, но попробуйте повторить по комментам с этой урлы.
по пути vendor/laravel/framework/src/Illuminate/Http/UploadedFile.php
открыв его, находим
use Symfony\Component\HttpFoundation\File\UploadedFile as SymfonyUploadedFile;
на UploadedFile жмякаем ctrl+b
и видем
class UploadedFile extends File
{
private $test = false;
private $originalName;
private $mimeType;
private $size;
private $error;
бла бла
попробуйте сменить private $test = false; на true
Изменено sam (02.04.2018 16:22:00)
Не в сети
У меня работает валидация изображения:
use Illuminate\Support\Facades\Validator;
{{ Form::file('image', ['id'=>'smile', 'min'=> 1, 'max'=> 3, 'name'=>'file']) }}
в методе:
if($request->isMethod('post')) {
$rules = array(
'file' => 'required|mimes:jpeg,jpg,png,bmp | max:1000', // dimensions:min_width=200,min_height=200
'smile' => 'unique:smiles|required|max:12|min:2',
'comment' => 'bail|required|max:200|min:2',
);
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return Redirect::back()
->withErrors($validator)
->withInput();
}
иначе ок
@if (isset($errors) && count($errors) > 0)
<div class="alert alert-danger" align="left">
<button type="button" class="close" data-dismiss="alert">x</button>
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{!! $error !!}</li>
@endforeach
</ul>
</div>
</div>
@endif
п.с. можно допихать image в rules но и так работает
private $test = false; // правки не понадобились
Изменено sam (02.04.2018 19:05:22)
Не в сети