"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > DTO를 사용하여 Laravel에서 데이터 전송 단순화

DTO를 사용하여 Laravel에서 데이터 전송 단순화

2024-11-07에 게시됨
검색:225

Simplifying Data Transfer in Laravel with DTOs

다음은 Laravel 데이터:

를 사용하여 데이터 전송 개체(DTO)를 생성하는 방법에 대한 단계별 예입니다.

1. Laravel 데이터 패키지 설치

시작하려면 Composer를 사용하여 spatie/laravel-data 패키지를 설치하세요. 이 패키지는 DTO를 생성하고 데이터를 효율적으로 관리하는 데 도움이 됩니다.

composer require spatie/laravel-data

2. 데이터 전송 객체(DTO) 생성

패키지를 설치한 후 데이터 전송을 처리하기 위한 DTO 클래스를 만들 수 있습니다. User 엔터티가 있고 사용자 데이터 전송을 위한 DTO를 생성한다고 가정합니다.

다음 Artisan 명령을 실행하여 새로운 DTO 클래스를 생성하세요:

php artisan make:data UserData

이렇게 하면 App/Data 디렉터리 내에 UserData 클래스가 생성됩니다.

3. DTO에서 속성 및 유형 정의

이제 UserData 클래스를 편집하여 DTO에 대해 기대하는 속성과 데이터 유형을 정의해 보겠습니다.

namespace App\Data;

use Spatie\LaravelData\Data;

class UserData extends Data
{
    public function __construct(
        public string $name,
        public string $email,
        public string $address,
        public ?string $phone = null  // Optional phone field
    ) {}
}

설명:

  • __construct 메서드는 들어오는 값을 DTO 속성에 자동으로 할당합니다.
  • ?string $phone = null은 전화 속성이 선택 사항임을 나타냅니다.

4. 컨트롤러에서 DTO 사용

이제 UserData DTO가 생성되었으므로 컨트롤러 내에서 이를 사용하여 들어오는 데이터를 처리하고 변환하고 애플리케이션 레이어 간에 전달할 수 있습니다.

namespace App\Http\Controllers;

use App\Data\UserData;
use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        // Validate the incoming request data
        $validatedData = $request->validate([
            'name' => 'required|string',
            'email' => 'required|email',
            'address' => 'required|string',
            'phone' => 'nullable|string',
        ]);

        // Create a UserData DTO
        $userData = UserData::from($validatedData);

        // You can now access $userData->name, $userData->email, etc.
        User::create([
            'name' => $userData->name,
            'email' => $userData->email,
            'address' => $userData->address,
            'phone' => $userData->phone,
        ]);

        return response()->json(['message' => 'User created successfully']);
    }
}

설명:

  • UserData::from() 메서드는 검증된 요청 데이터를 DTO 개체에 자동으로 매핑합니다.
  • 이제 DTO 개체를 사용하여 컨트롤러와 모델(또는 애플리케이션의 다른 계층) 간에 데이터를 전송할 수 있습니다.

5. DTO를 사용하여 데이터 변환

응답을 반환할 때 데이터 변환에도 DTO를 사용할 수 있습니다. DTO를 통해 사용자 데이터를 반환하도록 UserController의 show 메서드를 수정해 보겠습니다.

public function show(User $user)
{
    // Convert the User model to UserData DTO
    $userData = new UserData(
        name: $user->name,
        email: $user->email,
        address: $user->address,
        phone: $user->phone
    );

    return response()->json($userData);
}

설명:

  • 여기에서는 User 모델의 속성을 DTO 생성자에 전달하여 UserData DTO를 수동으로 생성합니다.
  • 이 DTO는 JSON 응답으로 직접 반환될 수 있으므로 구조화된 데이터 형식이 보장됩니다.

6. 컬렉션이 있는 DTO

사용자 목록 가져오기와 같이 데이터 컬렉션을 사용하는 경우 DTO 패키지는 컬렉션을 처리하는 간단한 방법도 제공합니다.

public function index()
{
    $users = User::all();

    // Convert the collection of User models to a collection of UserData DTOs
    $userCollection = UserData::collection($users);

    return response()->json($userCollection);
}

설명:

  • UserData::collection($users) 메서드는 각 User 모델을 UserData DTO에 매핑하여 전체 컬렉션을 DTO 목록으로 변환합니다.

7. 데이터 변환 사용자 정의

spatie/laravel-data 패키지를 사용하면 속성 이름을 바꾸거나 계산된 필드를 추가하는 등 변환을 사용자 정의할 수 있습니다.

class UserData extends Data
{
    public function __construct(
        public string $name,
        public string $email,
        public string $address,
        public ?string $phone = null
    ) {}

    // Add a custom method to compute a full contact string
    public function fullContact(): string
    {
        return "{$this->name} ({$this->email})";
    }
}

이제 이 DTO로 작업할 때 fullContact()를 사용하여 사용자 정의 형식의 문자열을 얻을 수 있습니다.

8. 데이터 검증 및 DTO

Laravel Data의 규칙 기능을 사용하여 DTO에 직접 유효성 검사 규칙을 추가할 수 있습니다.

namespace App\Data;

use Spatie\LaravelData\Attributes\Validation\Email;
use Spatie\LaravelData\Attributes\Validation\Required;
use Spatie\LaravelData\Data;

class UserData extends Data
{
    public function __construct(
        #[Required] public string $name,
        #[Email] public string $email,
        public string $address,
        public ?string $phone = null
    ) {}
}

설명:

  • #[필수] 및 #[이메일]과 같은 유효성 검사 속성을 사용하면 DTO 수준에서 직접 유효성 검사를 시행하여 프로세스를 더욱 간소화할 수 있습니다.

결론

이 실습 튜토리얼에서는 Laravel Data를 사용하여 DTO(데이터 전송 객체)를 생성하고 사용하는 방법을 살펴보았습니다. DTO 패턴을 사용하면 데이터를 깔끔하게 관리하고 변환하여 애플리케이션 계층 간의 문제를 분리하는 동시에 코드를 더 쉽게 유지 관리할 수 있습니다. spatie/laravel-data 패키지는 DTO 관리를 단순화하여 개발자와 대규모 애플리케이션 모두에 사용하기 쉬운 기능을 제공합니다.

릴리스 선언문 이 글은 https://dev.to/mdarifulhaque/simplifying-data-transfer-in-laravel-with-dtos-1il7?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3