gpt4 book ai didi

php - Symfony2 - 如何阻止 Form->handleRequest 置空发布数据中不存在的字段

转载 作者:IT王子 更新时间:2023-10-28 23:55:44 25 4
gpt4 key购买 nike

我有一个在 Symfony 中构建的表单,当在 View 中呈现时,html 表单可能包含也可能不包含表单对象中的所有字段(实体类型有几个不同的状态,而不是所有字段在 View 中呈现)。

问题是,当表单在提交处理程序中处理时,通过表单对象的 handleRequest() 方法,它会将实体中不存在于发布数据中的所有属性重置为 null,从而清除任何现有值.

有什么方法可以告诉 Symfony 不要那么愚蠢,只处理 POST 数据中存在的字段吗?

或者我是否必须在 handleRequest 调用之前克隆实体,然后遍历 POST 值并将相关值从 post-handleRequest 实体复制到实体的 pre-handleRequest 克隆中,因此我保留了不在 POST 数据中。

呸!正如您所看到的,对于一个有点愚蠢的问题,它有点愚蠢的解决方案,tbh。

如果实体实际上是一个新创建的对象,我可以理解 symfony 这样做,但是它是从数据库加载的,然后 handleRequest 被调用 - 它应该足够明智地知道该对象已经被初始化并且只设置字段传入 POST 数据。

感谢您的帮助。

问候

史蒂夫。

最佳答案

简而言之,不要使用handleRequest

您应该直接使用 submit 并将 clearMissing 参数设置为 false。

Symfony/Component/Form/FormInterface

/**
* Submits data to the form, transforms and validates it.
*
* @param null|string|array $submittedData The submitted data.
* @param bool $clearMissing Whether to set fields to NULL
* when they are missing in the
* submitted data.
*
* @return FormInterface The form instance
*
* @throws Exception\AlreadySubmittedException If the form has already been submitted.
*/
public function submit($submittedData, $clearMissing = true);

当您使用 handleRequest 时,它会计算出您想要提交的数据,然后使用 $form->submit($data, 'PATCH' !== $method) 提交它;,意思是除非你已经使用 PATCH 方法提交了表单,否则它将清除字段。

要自己提交表单而不清除您可以使用...

$form->submit($request->get($form->getName()), false);

.. 从请求中获取表单数据数组并直接提交,但将 clear missing fields 参数设置为 false。

关于php - Symfony2 - 如何阻止 Form->handleRequest 置空发布数据中不存在的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25291607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com