Aquí hay un ejemplo paso a paso sobre cómo crear objetos de transferencia de datos (DTO) usando Laravel Data:
Para comenzar, instale el paquete spatie/laravel-data usando Composer. Este paquete ayuda a crear DTO y administrar datos de manera eficiente.
composer require spatie/laravel-data
Después de instalar el paquete, podemos crear una clase DTO para manejar la transferencia de datos. Supongamos que tenemos una entidad de usuario y queremos crear un DTO para transferir datos de usuario.
Ejecute el siguiente comando Artisan para generar una nueva clase DTO:
php artisan make:data UserData
Esto creará una clase UserData dentro del directorio App/Data.
Ahora, editemos la clase UserData para definir las propiedades y tipos de datos que espera para su 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 ) {} }
Ahora que se creó el DTO UserData, podemos usarlo dentro de nuestro controlador para manejar los datos entrantes, transformarlos y pasarlos entre capas de la aplicación.
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']); } }
También puede utilizar el DTO para transformar datos al devolver respuestas. Modifiquemos el método show en UserController para devolver datos del usuario a través del 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); }
Si está trabajando con colecciones de datos, como buscar una lista de usuarios, el paquete DTO también proporciona un método simple para manejar colecciones.
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); }
El paquete spatie/laravel-data permite personalizar la transformación, por ejemplo, cambiar el nombre de los atributos o agregar campos calculados.
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})"; } }
Ahora, puedes usar fullContact() para obtener una cadena con formato personalizado cuando trabajes con este DTO.
Puedes agregar reglas de validación directamente en el DTO usando la función Reglas de 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 ) {} }
En este tutorial práctico, exploramos cómo crear y usar objetos de transferencia de datos (DTO) usando Laravel Data. Con el patrón DTO, puede administrar y transformar sus datos de manera limpia, asegurando la separación de preocupaciones entre las capas de su aplicación, mientras hace que el código sea más fácil de mantener. El paquete spatie/laravel-data simplifica la gestión de DTO y ofrece funciones fáciles de usar tanto para desarrolladores como para aplicaciones a gran escala.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3