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 EventListener
或 EventSubscriber
。
http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html
在您的情况下,您需要收听/订阅prePersist
、preUpdate
和postLoad
事件。
【讨论】:
如果数据不是来自表单或我不使用表单,对我有用但不实用。以上是关于Symfony2:将“pre-set”和“post-get”实体方法放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
当文件大于 post_max_size 时 Symfony2 验证器不工作
最佳实践以及如何在 Symfony2 中找到从 iOS AFNetworking 获取 POST 数据并在 GET 中返回 JSON?
symfony2 symofny3中得到get post session cookies的方法
Symfony2:KnpPaginator 仅显示带有 POST 表单的第一页
使用 symfony2 从 post Multipart (Content-Disposition: form-data) 获取数据