티스토리 뷰
라라벨 모던하게 DTO 사용하기 (feat: Laravel Spring)
필요패키지 :
# laravel-data
$ composer require spatie/laravel-data
$ php artisan vendor:publish --provider="Spatie\LaravelData\LaravelDataServiceProvider" --tag="data-config"
# laravel-route-attributes
$ composer require spatie/laravel-route-attributes
$ php artisan vendor:publish --provider="Spatie\RouteAttributes\RouteAttributesServiceProvider" --tag="config"
지금까지 라라벨에 Modren 하게 DTO를 하려는 시도는 많았으나,
많이 어설프거나 오히려 불편했었습니다.
대부분의 한국 개발자들은 언어의 상관없이 Java Spring 을 경험했기 때문에 그 모습을 생각하고 모던 DTO를 접했다가는 실망이 이만저만이 아니었는데.. 이번 PHP8 의 Attirubte (특성)이 생기면서 많이 비슷해졌습니다.
위에 패키지를 적용한 Laravel Controller 의 모습
<?php
namespace App\Http\Controllers;
use App\DTO\DogData;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('dogs')]
class DogController extends Controller
{
#[Get('/', name: 'dog.index')]
public function index(): array
{
return [
'type' => 'dog',
'list' => [],
];
}
#[Get('/store')]
public function store(DogData $dto): array
{
return [
'type' => $dto->type,
'name' => $dto->name,
];
}
}
DogData class (DTO)
<?php
namespace App\DTO;
use Spatie\LaravelData\Attributes\Validation as Rule;
use Spatie\LaravelData\Data;
class DogData extends Data
{
public function __construct(
#[Rule\Required]
public ?string $name,
#[Rule\Min(5)]
#[Rule\Nullable]
public ?string $type
)
{
}
}
등록된 라우터 리스트의 모습
DogData class를 보면, 기존 Rule 검사를 위해서 Custom Request 를 만들었어는데, 이제는 Spring 과 같이 DTO 에서 룰검사를 하는 모습을 보여줍니다. 뿐만 아니라 DogController 에서 PHP8에서 생긴 Attribute 를 이용하면 web.php 나 api.php 에 별도 등록 없이 바로 Route 가 등록되는 모습을 볼수 있습니다.
이제 Laravel 에서도 자바 스프링과 같이 DTO를 모던하게 쓸수 있게 되었는데..
필자는 이 작업을 하면서 좀 회의감이 들었습니다. 확실히 좋아진건 맞는데 이럴거면 내가 왜 PHP 를 하고 있는걸가, 그냥 자바나 코틀린을 하지.. 라는 생각이 드는것은 기분 탓일지...
ps..
자바와 유사항 형태의 DTO를 만들기 위해서 패키지를 만들고 있었는데,
이미 있었네요. 역시 spatie 형은 대단해..
'개발 > Composer 추천' 카테고리의 다른 글
Laravel 추천 패키지 (0) | 2023.02.17 |
---|---|
Laravel Swagger 쉽게 적용하기 (0) | 2022.09.02 |
라라벨 개발시 설치하면 좋은 composer 리스트 (0) | 2018.12.04 |
라라벨 이미지 처리 (0) | 2018.09.04 |
라라벨 개발 도우미 (0) | 2018.09.04 |