In diesem dritten Beitrag dieser Serie erstellen wir eine Entität, die aus dem DTO, das wir im ersten Artikel der Serie erstellt haben, in der Datenbank gespeichert werden kann.
Um mit diesem Abschnitt zu beginnen, gehen wir davon aus, dass wir Doctrine für die Kommunikation mit der Datenbank verwenden und unsere Benutzer-Entität wie folgt aussieht:
#[ORM\Entity(repositoryClass: UserRepository::class)] class User { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(length: 150)] private string $firstname; #[ORM\Column(length: 255)] private string $lastname; #[ORM\Column(length: 25)] private string $dob; #[ORM\Column] private \DateTimeImmutable $createdAt; #[ORM\Column] private string $token; // getters and setters }
Die Felder email, firstname, lastname und dob werden mit den UserInputDTO-Werten und gefüllt Die Felder createdAt und token werden gemäß den folgenden Regeln ausgefüllt:
Da wir entschieden haben, wie wir die Entitätsfelder füllen, gehört dieser Teil des Codes zur Domäne, da er Domänengeschäftsregeln enthält. Wir benötigen also eine Servicedomäne, um diese Aufgaben zu erledigen. Lass es uns codieren.
class UserEntityBuilder { public function buildEntity(UserInputDTO $userInputDto): User { $user = new User(); $user->setEmail($userInputDto->email); $user->setFirstname($userInputDto->firstname); $user->setLastname($userInputDto->lastname); $user->setDob($userInputDto->dob); $user->setToken(bin2hex(random_bytes(50))); $user->setCreatedAt(new \DateTimeImmutable()); return $user; } }
Wie Sie sehen können, erstellt die Methode UserEntityBuilder buildEntity die Entität User gemäß den vorab festgelegten Regeln und gibt die Entität zurück.
Jetzt brauchen wir einen Dienst, der für die Koordinierung der Prozesse zur Rettung des Unternehmens zuständig ist:
Lass es uns codieren.
class UserCreator { public function __construct( private readonly UserEntityBuilder $userEntityBuilder, private readonly EntityManagerInterface $em, ){} public function createUser(UserInputDTO $userInputDto): object { $user = $this->userEntityBuilder->buildEntity($userInputDto); $this->em->persist($user); $this->em->flush(); return '.....'; // Return a DTO ready to be used by the presentation layer } }
Wie Sie im obigen Code sehen können, verwendet der UserCreator-Anwendungsschichtdienst zuerst den UserEntityBuilder, um die Entität zu erstellen, und verwendet dann den Doctrine-Entitätsmanager, um sie in der Datenbank zu speichern .
Möglicherweise ist Ihnen aufgefallen, dass die „Return“-Zeile nicht vollständig ist. ¿Was sollen wir hier zurückgeben?. Wir werden es im nächsten und letzten Artikel dieser Serie sehen :)
Das ist eine gute Frage. Meiner Meinung nach würden sie zu unserer Domäne gehören, da sie zwar eine Zuordnung von Datenbanktabellen zu Objekten in unserer Anwendung darstellen, aber unsere Entscheidungen bezüglich des Datenmodells des Projekts kapseln.
Die Tatsache, dass sie zu unserer Domäne gehören können, bedeutet nicht, dass sie als DTOs verwendet werden können. Sie sollten isoliert sein und nur zum Speichern von Daten in der Datenbank und zum Empfangen von Daten von dort verwendet werden.
In diesem dritten Artikel haben wir einen Domänendienst erstellt, um eine Benutzerentität zu erstellen, die zur dauerhaften Speicherung in der Datenbank bereit ist, und außerdem einen Anwendungsdienst erstellt, der die Entität in der Datenbank speichert, indem wir den Domänendienst zum Erstellen des Benutzers verwenden der Doctrine-Entity-Manager, um es zu speichern.
Im nächsten und letzten Artikel lernen wir, wie man ein Ausgabe-DTO mit den gespeicherten Benutzerinformationen erstellt, die bereit sind, an die Präsentationsebene zurückgegeben zu werden.
Wenn Ihnen meine Inhalte gefallen und Sie Freude am Lesen haben und Sie daran interessiert sind, mehr über PHP zu erfahren, können Sie mein E-Book über die Erstellung einer betriebsorientierten API mit PHP und dem Symfony Framework lesen. Sie finden es hier: Erstellen einer betriebsorientierten API mit PHP und dem Symfony Framework: Eine Schritt-für-Schritt-Anleitung
Das obige ist der detaillierte Inhalt vonErstellen fokussierter Domänenanwendungen. Ein Symfony-Ansatz (Speichern der Entität). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!