Aqui está um exemplo passo a passo sobre como criar objetos de transferência de dados (DTOs) usando Laravel Data:
Para começar, instale o pacote spatie/laravel-data usando o Composer. Este pacote ajuda na criação de DTOs e no gerenciamento eficiente de dados.
composer require spatie/laravel-data
Depois de instalar o pacote, podemos criar uma classe DTO para lidar com a transferência de dados. Suponha que temos uma entidade User e queremos criar um DTO para transferir dados do usuário.
Execute o seguinte comando Artisan para gerar uma nova classe DTO:
php artisan make:data UserData
Isso criará uma classe UserData dentro do diretório App/Data.
Agora, vamos editar a classe UserData para definir as propriedades e os tipos de dados que você espera para seu 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 ) {} }
Agora que o UserData DTO foi criado, podemos usá-lo dentro de nosso controlador para lidar com os dados recebidos, transformá-los e passá-los entre as camadas do aplicativo.
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']); } }
Você também pode usar o DTO para transformar dados ao retornar respostas. Vamos modificar o método show no UserController para retornar os dados do usuário através do DTO.
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); }
Se você estiver trabalhando com coleções de dados, como buscar uma lista de usuários, o pacote DTO também fornece um método simples para lidar com coleções.
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); }
O pacote spatie/laravel-data permite customização da transformação, por exemplo, renomeando atributos ou adicionando campos computados.
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})"; } }
Agora, você pode usar fullContact() para obter uma string formatada personalizada ao trabalhar com este DTO.
Você pode adicionar regras de validação diretamente no DTO usando o recurso Regras do Laravel Data.
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 ) {} }
Neste tutorial prático, exploramos como criar e usar objetos de transferência de dados (DTOs) usando Laravel Data. Com o padrão DTO, você pode gerenciar e transformar seus dados de maneira limpa, garantindo a separação de preocupações entre as camadas do seu aplicativo e, ao mesmo tempo, facilitando a manutenção do código. O pacote spatie/laravel-data simplifica o gerenciamento de DTO, oferecendo recursos fáceis de usar para desenvolvedores e aplicativos de grande escala.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3