„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Vereinfachung der Datenübertragung in Laravel mit DTOs

Vereinfachung der Datenübertragung in Laravel mit DTOs

Veröffentlicht am 07.11.2024
Durchsuche:457

Simplifying Data Transfer in Laravel with DTOs

Hier ist ein Schritt-für-Schritt-Beispiel zum Erstellen von Data Transfer Objects (DTOs) mit Laravel Data:

1. Laravel-Datenpaket installieren

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

2. Erstellen Sie ein Data Transfer Object (DTO)

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.

3. Eigenschaften und Typen in DTO definieren

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
    ) {}
}

Erläuterung:

  • Die __construct-Methode weist die eingehenden Werte automatisch den DTO-Eigenschaften zu.
  • Der ?string $phone = null gibt an, dass die Telefoneigenschaft optional ist.

4. DTO in einem Controller verwenden

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']);
    }
}

Erläuterung:

  • Die Methode UserData::from() ordnet die validierten Anforderungsdaten automatisch dem DTO-Objekt zu.
  • Das DTO-Objekt kann jetzt zum Übertragen von Daten zwischen dem Controller und dem Modell (oder anderen Schichten der Anwendung) verwendet werden.

5. Daten mit DTO transformieren

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);
}

Erläuterung:

  • Hier erstellen wir manuell ein UserData-DTO, indem wir die Eigenschaften des Benutzermodells an den DTO-Konstruktor übergeben.
  • Dieses DTO kann direkt als JSON-Antwort zurückgegeben werden, wodurch ein strukturiertes Datenformat gewährleistet wird.

6. DTO mit Sammlungen

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);
}

Erläuterung:

  • Die Methode UserData::collection($users) ordnet jedes Benutzermodell dem UserData-DTO zu und wandelt die gesamte Sammlung in eine Liste von DTOs um.

7. Datentransformation anpassen

Das Paket spatie/laravel-data ermöglicht die Anpassung der Transformation, beispielsweise das Umbenennen von Attributen oder das Hinzufügen berechneter Felder.

Die Klasse „UserData“ erweitert Daten { öffentliche Funktion __construct( öffentliche Zeichenfolge $name, öffentliche Zeichenfolge $email, öffentliche Zeichenfolge $address, öffentlicher ?string $phone = null ) {} // Eine benutzerdefinierte Methode hinzufügen, um eine vollständige Kontaktzeichenfolge zu berechnen öffentliche Funktion fullContact(): string { return „{$this->name} ({$this->email})“; } }
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.

Datenvalidierung und DTOs

Mit der Regelfunktion von Laravel Data können Sie Validierungsregeln direkt im DTO hinzufügen.


Namespace App\Data; verwenden Sie Spatie\LaravelData\Attributes\Validation\Email; verwenden Sie Spatie\LaravelData\Attributes\Validation\Required; verwenden Sie Spatie\LaravelData\Data; Die Klasse UserData erweitert Data { öffentliche Funktion __construct( #[Erforderlich] öffentliche Zeichenfolge $name, #[Email] öffentliche Zeichenfolge $email, öffentliche Zeichenfolge $address, öffentlicher ?string $phone = null ) {} }
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:

    Mit Validierungsattributen wie #[Erforderlich] und #[Email] können Sie die Validierung direkt auf DTO-Ebene erzwingen und so den Prozess noch weiter optimieren.
Abschluss

In diesem praktischen Tutorial haben wir untersucht, wie man Data Transfer Objects (DTOs) mit Laravel Data erstellt und verwendet. Mit dem DTO-Muster können Sie Ihre Daten sauber verwalten und transformieren, um die Trennung von Belangen zwischen den Schichten Ihrer Anwendung sicherzustellen und gleichzeitig die Wartung des Codes zu vereinfachen. Das Paket spatie/laravel-data vereinfacht die DTO-Verwaltung und bietet benutzerfreundliche Funktionen sowohl für Entwickler als auch für umfangreiche Anwendungen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/mdarifulhaque/simplifying-data-transfer-in-laravel-with-dtos-1il7?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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