Hier ist ein Schritt-für-Schritt-Beispiel zum Erstellen von Data Transfer Objects (DTOs) mit Laravel Data:
Installieren Sie zunächst das Paket spatie/laravel-data mit Composer. Dieses Paket hilft bei der Erstellung von DTOs und der effizienten Datenverwaltung.
composer require spatie/laravel-data
Nach der Installation des Pakets können wir eine DTO-Klasse für die Abwicklung der Datenübertragung erstellen. Angenommen, wir haben eine Benutzerentität und möchten ein DTO für die Übertragung von Benutzerdaten erstellen.
Führen Sie den folgenden Artisan-Befehl aus, um eine neue DTO-Klasse zu generieren:
php artisan make:data UserData
Dadurch wird eine UserData-Klasse im App/Data-Verzeichnis erstellt.
Bearbeiten wir nun die UserData-Klasse, um die Eigenschaften und Datentypen zu definieren, die Sie für Ihr DTO erwarten.
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 ) {} }
Nachdem das UserData-DTO erstellt wurde, können wir es in unserem Controller verwenden, um eingehende Daten zu verarbeiten, umzuwandeln und zwischen Ebenen der Anwendung weiterzugeben.
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']); } }
Sie können das DTO auch zum Transformieren von Daten verwenden, wenn Sie Antworten zurückgeben. Ändern wir die Show-Methode im UserController, um Benutzerdaten über das DTO zurückzugeben.
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); }
Wenn Sie mit Datensammlungen arbeiten, wie zum Beispiel dem Abrufen einer Liste von Benutzern, bietet das DTO-Paket auch eine einfache Methode zur Handhabung von Sammlungen.
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); }
Das Paket spatie/laravel-data ermöglicht die Anpassung der Transformation, beispielsweise das Umbenennen von Attributen oder das Hinzufügen berechneter Felder.
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})"; } }Jetzt können Sie fullContact() verwenden, um eine benutzerdefinierte formatierte Zeichenfolge zu erhalten, wenn Sie mit diesem DTO arbeiten.
8.
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})"; } }Erläuterung:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3