Voici un exemple étape par étape sur la façon de créer des objets de transfert de données (DTO) à l'aide de Données Laravel :
Pour commencer, installez le package spatie/laravel-data à l'aide de Composer. Ce package aide à créer des DTO et à gérer efficacement les données.
composer require spatie/laravel-data
Après avoir installé le package, nous pouvons créer une classe DTO pour gérer le transfert de données. Supposons que nous ayons une entité utilisateur et que nous souhaitions créer un DTO pour transférer les données utilisateur.
Exécutez la commande Artisan suivante pour générer une nouvelle classe DTO :
php artisan make:data UserData
Cela créera une classe UserData dans le répertoire App/Data.
Maintenant, modifions la classe UserData pour définir les propriétés et les types de données que vous attendez pour votre 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 ) {} }
Maintenant que le DTO UserData est créé, nous pouvons l'utiliser dans notre contrôleur pour gérer les données entrantes, les transformer et les transmettre entre les couches de l'application.
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']); } }
Vous pouvez également utiliser le DTO pour transformer les données lors du renvoi des réponses. Modifions la méthode show dans UserController pour renvoyer les données utilisateur via le 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 vous travaillez avec des collections de données, par exemple pour récupérer une liste d'utilisateurs, le package DTO fournit également une méthode simple pour gérer les collections.
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); }
Le package spatie/laravel-data permet de personnaliser la transformation, par exemple en renommant des attributs ou en ajoutant des champs calculés.
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})"; } }
Maintenant, vous pouvez utiliser fullContact() pour obtenir une chaîne formatée personnalisée lorsque vous travaillez avec ce DTO.
Vous pouvez ajouter des règles de validation directement dans le DTO à l'aide de la fonctionnalité Règles 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 ) {} }
Dans ce didacticiel pratique, nous avons exploré comment créer et utiliser des objets de transfert de données (DTO) à l'aide de Laravel Data. Avec le modèle DTO, vous pouvez gérer et transformer proprement vos données, garantissant la séparation des préoccupations entre les couches de votre application, tout en facilitant la maintenance du code. Le package spatie/laravel-data simplifie la gestion des DTO, offrant des fonctionnalités faciles à utiliser pour les développeurs et les applications à grande échelle.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3