0

0

创建专注的领域应用程序 Symfony 方法(保存实体)

心靈之曲

心靈之曲

发布时间:2024-11-16 09:12:15

|

1078人浏览过

|

来源于dev.to

转载

创建专注的领域应用程序 symfony 方法(保存实体)

介绍

在本系列的第三篇文章中,我们将创建一个准备好从我们在本系列第一篇文章中创建的 dto 持久保存到数据库的实体。

将 userinputdto 转换为实体

从本节开始,我们假设我们正在使用原则与数据库进行通信,并且我们的 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
}

字段 emailfirstnamelastnamedob 将填充 userinputdto 值, createdattoken 字段将按照以下规则填充:

  • createdat 字段将保存当前日期。
  • 令牌字段将包含 50 个字母数字字符的字符串。

当我们决定如何填充实体字段时,这部分代码将属于域,因为它包含域业务规则。因此,我们需要一个服务域来完成这些工作。让我们来编码吧。

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 实体并返回该实体。

Lovart
Lovart

全球首个AI设计智能体

下载

用于创建和保存实体的应用程序服务

现在,我们需要一个服务来负责协调保存实体所涉及的流程:

  • 使用我们最近创建的 userentitybuilder 域服务创建 user 实体。
  • 使用 entitymanager 服务将实体持久保存在数据库上。 entitymanager 服务应被视为基础设施服务,因为它是由 symfony 框架通过其 symfony/orm-pack 组件提供的。

让我们来编码吧。

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实体管理器将其保存到数据库.

您可能已经注意到“返回”行不完整。 ¿ 我们应该返回什么?我们将在本系列的下一篇也是最后一篇文章中看到它:)

那实体呢?它们属于该域吗?

这是个好问题。在我看来,它们属于我们的领域,因为虽然它们代表数据库表到我们应用程序中的对象的映射,但它们封装了我们有关项目数据模型的决策。
现在,它们属于我们的域这一事实并不意味着它们可以用作 dto。它们应该被隔离,并且仅用于将数据保存到数据库并从数据库接收数据。

结论

在第三篇文章中,我们创建了一个域服务来创建一个准备保存到数据库的用户实体,并且还创建了一个应用程序服务,通过使用域服务创建用户和将实体保存到数据库中学说实体管理器来保存它。
在下一篇也是最后一篇文章中,我们将学习如何创建一个输出 dto,并将保存的用户信息准备返回到表示层。

如果您喜欢我的内容并喜欢阅读它,并且有兴趣了解有关 php 的更多信息,您可以阅读我的电子书,了解如何使用 php 和 symfony 框架创建面向操作的 api。您可以在这里找到它:使用 php 和 symfony 框架构建面向操作的 api:分步指南

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP Symfony框架
PHP Symfony框架

本专题专注于PHP主流框架Symfony的学习与应用,系统讲解路由与控制器、依赖注入、ORM数据操作、模板引擎、表单与验证、安全认证及API开发等核心内容。通过企业管理系统、内容管理平台与电商后台等实战案例,帮助学员全面掌握Symfony在企业级应用开发中的实践技能。

87

2025.09.11

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6629

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

843

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1092

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

2189

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号