📦 Пакет Laravel Data от Spatie Открыл для себя великолепный пакет Laravel Data от бельгийского разработчика Spatie. Пакет позволяет создавать DTO на стероидах и делать валидацию на аннотациях.
Раньше для этих целей я просто брал пакет symfony/validator и игрался с ним.
Symfony Validator 1. DTO:
use SymfonyComponentValidatorConstraints as Assert;
class UserDto { #[AssertNotBlank, AssertEmail] public string $email;
#[AssertNotBlank, AssertLength(min: 2, max: 255)] public string $name;
#[AssertNotBlank(groups: ['create']), AssertLength(min: 8)] public string $password; }
2. Валидация в сервисе:
use SymfonyComponentValidatorValidatorValidatorInterface;
class UserService { public function __construct(private ValidatorInterface $validator) {}
public function createUser(array $data): UserDto { $dto = new UserDto(); $dto->email = $data['email']; $dto->name = $data['name']; $dto->password = $data['password'];
$violations = $this->validator->validate($dto, null, ['create']);
if (count($violations) > 0) { throw new ValidationException($violations); }
return $dto; } }
Оно работало так достаточно долго, но выглядело немного инородно, пока я не встретил пакет Laravel Data, который отлично интегрирован в Laravel и кажется ламповым и родным.
Laravel Data от Spatie 1. DTO:
use SpatieLaravelDataData; use SpatieLaravelDataAttributesValidation{ Email, Required, Max, Min };
class UserData extends Data { public function __construct( #[Required, Email] public string $email,
#[Required, Max(255), Min(2)] public string $name,
#[Required, Min(8)] public string $password, ) {} }
2. Валидация в сервисе
use SpatieLaravelDataData;
class UserService { public function createUser(array $data): UserData { $userData = UserData::from($data);
return $userData; } }
👉 https://spatie.be/docs/laravel-data/v4/introduction
#php #laravel #dto #LaravelData
👮♂️ Злой полицейский
В этом посте были ссылки, но мы их удалили по правилам Сетки