티스토리 뷰

라라벨 모던하게 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
댓글


최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday