Symfony2:将“pre-set”和“post-get”实体方法放在哪里?

Posted

技术标签:

【中文标题】Symfony2:将“pre-set”和“post-get”实体方法放在哪里?【英文标题】:Symfony2: where to put "pre-set" and "post-get" entity methods? 【发布时间】:2014-04-14 20:40:41 【问题描述】:

我有三个不同的实体属性,它们在保存到数据库之前必须“预解析”。 在向用户显示之前,相同的属性必须经过“后解析”。

有几个不同的控制器动作正在设置/获取这些属性。目前,我基本上在每种方法中都预解析/后解析这些属性。

我应该如何处理?我正在考虑将它直接放入实体中,但这不是那个地方。特别是因为我需要在几个实体中使用相同的预解析函数。

基本上这些函数必须在每个 setter 和 getter 调用之前运行。

【问题讨论】:

docs.doctrine-project.org/en/2.0.x/reference/events.html(预解析:prePersist,preUpdate,后解析:postLoad) 谢谢。我使用了事件 【参考方案1】:

如果您有一个生成模型代码的 t4 模板,那么更改属性 setter/getter 以进行数据预处理和后处理相对容易。

【讨论】:

【参考方案2】:

您可能想查看数据转换器 - http://symfony.com/doc/current/cookbook/form/data_transformers.html

更新:

另一种可能是最合适的方法是使用 Doctrine EventListenerEventSubscriber

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html

在您的情况下,您需要收听/订阅prePersistpreUpdatepostLoad 事件。

【讨论】:

如果数据不是来自表单或我不使用表单,对我有用但不实用。

以上是关于Symfony2:将“pre-set”和“post-get”实体方法放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

当文件大于 post_max_size 时 Symfony2 验证器不工作

最佳实践以及如何在 Symfony2 中找到从 iOS AFNetworking 获取 POST 数据并在 GET 中返回 JSON?

访问 Symfony2 请求对象中的 POST 值

symfony2 symofny3中得到get post session cookies的方法

Symfony2:KnpPaginator 仅显示带有 POST 表单的第一页

使用 symfony2 从 post Multipart (Content-Disposition: form-data) 获取数据