Привет! Сегодня я хочу рассказать о новом пакете для Laravel, который может значительно упростить вашу жизнь, если вы часто работаете с FormRequest классами. Пакет называется desole/laravel-generate-request, и он позволяет автоматически генерировать FormRequest классы на основе ваших моделей. Давайте разберем, как это работает и почему это может быть полезно.
Зачем это нужно?
FormRequest классы в Laravel — это отличный способ вынести логику валидации из контроллеров и сделать код более чистым и поддерживаемым. Однако, создание этих классов вручную может быть утомительным, особенно если у вас много моделей и полей.
Представьте, что у вас есть модель User с полями name, email, password и другими. Вам нужно создать FormRequest класс, где каждое поле будет иметь свои правила валидации. Это может занять много времени, особенно если у вас десятки моделей.
Вот здесь на помощь приходит пакет desole/laravel-generate-request. Он автоматически генерирует FormRequest классы на основе ваших моделей, используя правила валидации из базы данных или кастомные правила, указанные в модели.
Установка
Установить пакет можно через Composer:
composer require desole/laravel-generate-request
После установки пакет автоматически регистрирует Artisan команду, которую можно использовать для генерации FormRequest классов.
Использование
Основная команда для генерации FormRequest классов выглядит так:
php artisan request:make {Model} {Name} {Type} {--only-custom}
Параметры:
-
Model: Имя модели, на основе которой будет создан FormRequest класс.
-
Name: Имя создаваемого FormRequest класса.
-
Type: Тип FormRequest класса (store, update, delete).
-
--only-custom: Если указан, в FormRequest класс попадут только те поля, которые явно указаны в методе модели для выбранного типа.
Пример:
php artisan request:make User UserStoreRequest store
Эта команда создаст класс UserStoreRequest с правилами валидации для полей модели User.
Как это работает?
1. Правила из базы данных
Пакет автоматически определяет правила валидации на основе типов данных в базе данных. Например:
-
varchar(255) → string|max:255
-
int → integer
-
date → date
-
json → array
2. Кастомные правила
Вы можете указать кастомные правила валидации прямо в модели. Для этого добавьте методы getStoreFields, getUpdateFields или getDeleteFields.
Пример модели:
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
public function getStoreFields()
{
return [
'email' => 'required|email|unique:users,email', // Кастомные правила
'name' => '', // Поле без правил (будут использованы правила из базы данных)
'custom_field' => 'string|max:100', // Поле, которого нет в базе данных
];
}
}
3. Режим --only-custom
Если вы хотите, чтобы в FormRequest класс попали только кастомные правила, используйте флаг --only-custom:
php artisan request:make User UserStoreRequest store --only-custom
Пример сгенерированного FormRequest
Пример сгенерированного FormRequest
Для команды: php artisan request:make User UserStoreRequest store
Будет создан следующий класс:
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class UserStoreRequest extends FormRequest
{
public function rules()
{
return [
'email' => ['required', 'email', 'unique:users,email'],
'name' => ['required', 'string', 'max:255'],
'password' => ['required', 'string', 'min:8'],
'custom_field' => ['string', 'max:100'],
];
}
}
Преимущества пакета
-
Экономия времени: Автоматическая генерация FormRequest классов избавляет от рутинной работы.
-
Гибкость: Поддержка кастомных правил и различных типов запросов (store, update, delete).
-
Интеграция с базой данных: Автоматическое определение правил валидации на основе типов данных..
Заключение
Пакет desole/laravel-generate-request — это мощный инструмент для автоматизации создания FormRequest классов в Laravel. Он не только экономит время, но и помогает поддерживать код в чистоте и порядке. Если вы часто работаете с FormRequest, этот пакет может стать вашим новым лучшим другом.
Попробуйте его в своем проекте и поделитесь своими впечатлениями в комментариях! Если у вас есть идеи для улучшения, создайте issue на GitHub.
Спасибо за внимание, и удачного кодинга!
Ссылки
P.S. Если вам понравился этот пакет, не забудьте поставить звезду на GitHub! Это поможет другим разработчикам узнать о нем.
Автор: MyDesole