Это моя первая запись на сайте. Сегодня я поделюсь с вами кое-чем полезным для Laravel-разработчиков.


Это моя первая запись на сайте. Сегодня я поделюсь с вами кое-чем полезным для Laravel-разработчиков.
Я предполагаю, что вы уже умеете устанавливать Laravel и сделали простую HTML-форму. Итак, вы узнаете, как:
Перед началом создайте форму хотя бы с двумя полями:
Примерно так:
Сначала создадим правило валидации для поля с полным именем.
Создадим новое правило командой artisan:
php artisan make:rule AlphaSpace
В папке ~laravel-project/app/rules появится новый файл.
Теперь добавьте логику в метод passes. Для нашей задачи используем такое регулярное выражение.
return preg_match('/^[\pL\s]+$/u', $value);
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class AlphaSpace implements Rule
{
public function __construct()
{
//
}
public function passes($attribute, $value)
{
//
}
public function message()
{
return 'The validation error message.';
}
}
Чтобы задать сообщение об ошибке, используем метод message. Просто замените стандартное сообщение на:
return preg_match('/^[\pL\s]+$/u', $value);
Затем откройте файл локализации и найдите такие строки:
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
Над этими строками добавим локализацию нашего сообщения:
'alpha_space' => 'The :attribute must contain letters and spaces only!',
Проверим, работает ли это. Оберните существующие правила в массив и добавьте новое правило так.
$validatedData = $request->validate([
'name' => ['required','max:255', new AlphaSpace],
'email' => 'required|email',
'phone' => 'required|phone_number',
]);
Если валидация не пройдёт и всё сделано верно, вы увидите сообщение об ошибке, которое задали ранее.
А если хочется использовать нативный синтаксис Laravel? Есть хорошее решение.
Можно расширить класс Validator, добавив короткое имя правила в методе boot файла App\ServiceProvider.php. Получится примерно так.
public function boot()
{
Validator::extend('alpha_space', 'App\\Rules\\AlphaSpace@passes');
}
После этого короткие имена правил можно использовать в контроллерах, form-request'ах и где угодно. Измените валидацию в контроллере так.
$validatedData = $request->validate([
'name' => 'required|max:255|alpha_space',
'email' => 'required|email',
'phone' => 'required|phone_number',
]);
Если вам ближе видеоформат — посмотрите видеоверсию.
Если найдёте ошибки или знаете более удобный способ — напишите своё мнение в комментариях на моём YouTube-канале.
Спасибо за внимание.