PHP前端开发

创建专注的领域应用程序 Symfony 方法(返回结果)

百变鹏仔 2天前 #PHP
文章标签 应用程序

介绍

这是本系列的最后一篇文章。在上一篇文章中,我们创建了一个应用程序服务,它使用 userentitybuilder 服务来创建实体。然后,使用条令实体管理器(这是一个基础设施服务)来持久化和刷新实体。
现在,是时候将结果返回到表示层了。

我想记住,在本系列的所有文章中,我们都将学说实体视为域实体。我知道这并不完全正确,最好将域实体与学说实体分开,但为了简单起见,我将使用学说实体作为域实体来完成本文我正在准备一篇新文章,我将在其中展示我如何构建完整的 symfony 应用程序,在那里您将看到域实体与学说完全解耦。

创建输出 dto 和输出构建器

在将结果返回到表示层之前,我们需要创建一个dto来表示我们想要返回的数据。假设我们只想返回 emailfirstnamelastnamedob 参数。我们的输出 dto 如下所示:

readonly class useroutputdto {    public function __construct(        public string $email,        public string $firstname,        public string $lastname,        public string $dob,    ){}}

现在输出 dto 已准备就绪,是时候创建一个服务来构建实体的输出了。该服务将成为我们域的一部分,因为我们决定哪些信息将成为输出 dto 的一部分。

class useroutputdtobuilder {    public function build(user $user): useroutputdto    {        return new useroutputdto(            $user->getemail(),            $user->getfirstname(),            $user->getlastname(),            $user->getdob()        );    }}

输出构建器非常简单,它创建一个 useroutputdto 将实体值中的参数传递给构造函数。

此输出构建器可以是应用程序或表示层的一部分,因为它不包含任何逻辑,但我会将其保留在域中,就像对 userentitybuilder 所做的那样。
请记住,userentitybuilder 确实包含一些额外的逻辑:

返回数据

准备好输出 dto 后,就可以将其定向到表示层了。在我们的例子中,哪些元素构成了表示层?考虑到我们将生成 symfony jsonresponse 并将其作为 http 响应返回,控制器将是代表我们表示层的元素。让我们回到正题。

class ApiController extends AbstractController{    #[Route('/api/entity', name: 'api_v1_post_entity', methods: ['POST'])]    public function saveAction(Request $request, DataProcessor $dataProcessor, UserCreator $userCreator): JsonResponse    {        $userInputDto = $dataProcessor->processData($request->getContent(), UserInputDTO::class);        $userOutputDto = $userCreator->createUser($userInputDto);        return $this->json($userInputDto);    }}

作为表示层的一部分,symfony 控制器使用其基础设施部分(abstractcontroller json 函数)从输出 dto 数据生成 jsonresponse,准备在http 响应。
如您所见,symfony 控制器还使用其他应用程序服务(dataprocessorusercreator)来执行 api 调用过程。

结论

在本系列的最后一篇文章中,我们探讨了在 symfony 应用程序中将数据返回到表示层的过程。我们首先创建一个输出数据传输对象 (dto) 来封装我们想要返回的用户数据,特别是电子邮件、名字、姓氏和出生日期。然后,我们开发了一个 useroutputdtobuilder 服务来从用户实体构建此 dto,强调定义输出中包含哪些信息的重要性。
最后,我们演示了 symfony 控制器如何充当表示层,利用 jsonresponse 功能将 dto 数据作为 http 响应返回。