Symfony的模板损坏数据

问题描述:

我发现,当我通过主义实体我们的PHP模板,设计人员就可以调用setter和更改数据。这通常不是什么大问题,除非有页面执行子请求,因此控制器可以看到这些更改,并且可能将其保存到数据库(标识映射模式返回对象而不是从存储刷新)!Symfony的模板损坏数据

有什么办法来防止更改数据的模板?

(我试过路过他们之前分离的实体,但是,使学说代理不能返回的数据我真的不想失去延迟加载)。

+0

我没有看到一个单一的原因直接传递主义实体的模板引擎。 你应该复制你需要的数据来渲染某个数组中的页面,并在动作模块的结尾处返回这个数组。如果使用阵列水合(而不是对象),也可以避免复制步骤。 – spider 2012-04-20 15:37:36

+0

@spider:懒惰加载是我传递对象的全部动机。 – jimmyjames 2012-04-20 15:49:27

+0

嗯,我仍然没有看到这一点。为什么在渲染页面时需要延迟加载?这就是“MVC”范例的“控制”部分:从模型中检索数据,为“视图”准备数据。模板引擎是“视图”部分,应该只需呈现数据。 – spider 2012-04-20 15:55:19

考虑使用递延明确更改跟踪政策:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/change-tracking-policies.html

只有你明确坚持实体将被视为更新。因此,在模板中完成的附带更新不会被保存。

我想你也可以尝试的通知政策,带着几分神奇,禁用通知发件人,让您的实体基本上仅对读取。

+0

感谢您的信息。我已经使用'延迟明确的',但这并没有改变我的问题,因为如果我需要坚持一些传递给视图的东西,那么我就和以前一样。我将使用蜘蛛的建议,即“我没有看到任何直接传递Doctrine Entities到模板引擎的理由。” – jimmyjames 2012-04-20 19:01:07

+0

这很好。我不太确定这个“不通过实体”的说法。似乎有点傻。对我而言,真正的问题是为什么你要在嵌入式控制器中坚持实体?似乎所有数据库更改都应在主模板启动之前完成。但那只是我,你可能有一个完全有效的用例。 – Cerad 2012-04-20 23:26:28