📦 Пакет 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

👮‍♂️ Злой полицейский


В этом посте были ссылки, но мы их удалили по правилам Сетки