이 시리즈의 세 번째 게시물에서는 시리즈의 첫 번째 기사에서 생성한 DTO에서 데이터베이스에 지속될 준비가 된 엔터티를 생성하겠습니다.
이 섹션을 시작하기 위해 교리를 사용하여 데이터베이스와 통신하고 User 엔터티가 다음과 같다고 가정해 보겠습니다.
#[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 }
email, firstname, lastname 및 dob 필드는 UserInputDTO 값으로 채워지고 createdAt 및 token 필드는 다음 규칙에 따라 채워집니다.
엔티티 필드를 어떻게 채울지 결정했으므로 코드의 이 부분은 도메인 비즈니스 규칙을 포함하므로 도메인에 속하게 됩니다. 따라서 이러한 작업을 수행하려면 서비스 도메인이 필요합니다. 코딩해 보겠습니다.
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; } }
보시다시피 UserEntityBuilder buildEntity 메소드는 미리 설정된 규칙에 따라 User 엔터티를 생성하고 해당 엔터티를 반환합니다.
이제 엔터티 저장과 관련된 프로세스를 조정하는 서비스가 필요합니다.
코딩해 보세요.
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 } }
위 코드에서 볼 수 있듯이 UserCreator 애플리케이션 계층 서비스는 먼저 UserEntityBuilder를 사용하여 엔터티를 생성한 다음 Doctrine 엔터티 관리자를 사용하여 이를 데이터베이스에 저장합니다. .
'return' 줄이 완전하지 않은 것을 눈치채셨을 것입니다. ¿ 여기에 무엇을 반환해야합니까?. 이 시리즈의 다음 기사와 마지막 기사에서 살펴보겠습니다 :)
좋은 질문입니다. 제 생각에는 데이터베이스 테이블을 애플리케이션의 객체에 매핑하기는 하지만 프로젝트의 데이터 모델에 관한 결정을 캡슐화하기 때문에 이는 우리 도메인에 속할 것입니다.
이제 그들이 우리 도메인에 속할 수 있다는 사실이 DTO로 사용될 수 있다는 의미는 아닙니다. 이는 격리되어야 하며 데이터베이스에 데이터를 저장하고 데이터베이스에서 데이터를 수신하는 데에만 사용해야 합니다.
이 세 번째 기사에서는 데이터베이스에 유지할 준비가 된 사용자 엔터티를 생성하기 위한 도메인 서비스를 생성했으며, 도메인 서비스를 사용하여 사용자 및 엔터티를 생성함으로써 엔터티를 데이터베이스에 저장하는 애플리케이션 서비스도 생성했습니다. 교리 엔터티 관리자에게 저장하세요.
다음 기사와 마지막 기사에서는 프리젠테이션 레이어로 반환할 준비가 된 저장된 사용자 정보를 사용하여 출력 DTO를 생성하는 방법을 뜨겁게 배울 것입니다.
내 콘텐츠가 마음에 들고 재미있게 읽고 PHP에 대해 더 자세히 알아보고 싶다면 PHP와 Symfony Framework를 사용하여 작업 지향 API를 만드는 방법에 대한 내 전자책을 읽어 보세요. 여기에서 찾을 수 있습니다: PHP 및 Symfony 프레임워크를 사용하여 작업 지향 API 구축: 단계별 가이드
위 내용은 집중적인 도메인 애플리케이션 생성. Symfony 접근 방식(엔티티 저장)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!