У меня есть форма, позволяющая прикрепить несколько файлов.
Я проверяю форму для поля вложения как:
$this->validate($request, [
'attachments.*' => 'mimes:jpg,jpeg,bmp,png|max:5000',
]);
Он работает правильно, но я также хочу разрешить одновременную загрузку не более 3 файлов.
Как мне этого добиться?






Есть возможность добавить Пользовательские правила проверки в laravel.
Также вы можете попробовать что-то вроде этого:
$this->validate($request, [
'attachments.*' => [
'mimes:jpg,jpeg,bmp,png',
function($attribute, $value, $fail) {
if (count($value) > 3) {
return $fail($attribute . ' should be less than or equal to 3.');
}
},
]
]);
Здесь опубликовано еще одно решение: Как проверить количество файлов
Поскольку attachments является массивом, вы можете использовать правило max для проверки его максимальных элементов как 3.
$messages = [
"attachments.max" => "file can't be more than 3."
];
$this->validate($request, [
'attachments.*' => 'mimes:jpg,jpeg,bmp,png|max:5000',
'attachments' => 'max:3',
],$messages);
Хорошо, это работает, но ошибка говорит: вложения не могут быть длиннее 3 символов. Итак, как я могу создать для этого собственное сообщение?
@Raj -Naam to suna hoga: обновлено специальным сообщением.
Я думаю, что лучший способ - создать новое правило проверки.
Согласно Laravel 8 мне удалось так:
1- Создал новое правило, выполнив эту команду:
php artisan make:rule UploadCount
2- Найдите новое правило UploadCount.php в разделе app/Rules и вставьте это:
public function passes($attribute, $value)
{
return (count($value) <= '5') ? true : false;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
if ( \Config::get('app.locale') == 'en') {
return 'You cannot upload more than 5 images';
} else {
return 'Non puoi caricare piu di 5 immagini';
}
}
Если вы видите, в моем случае ограничение составляет 5 файлов, но вы можете его изменить.
P.S. Я не удалял if statement из метода message(), потому что кому-то может понадобиться, чтобы он имел разные сообщения в случае локализации, иначе вы можете использовать папку lang с автоматическими сообщениями. Если ваш проект не является многоязычным, вы можете просто:
return 'You cannot upload more than 5 images';
3- Теперь в вашем запросе формы вы должны:
Импортируйте UploadCount: use App\Rules\UploadCount;.
а также:
public function rules()
{
return [
'images' => 'required|mimes:jpeg,jpg,png|max:32768',
'images' => [new UploadCount()],
];
}
Удачного кодирования!
Для этого вам нужно добавить собственное правило: laravel.com/docs/5.6/validation#custom-validation-rules