使用handleRequest验证表单的Symfony 2.3非常慢

时间:2014-03-12 19:19:58

标签: php forms validation symfony

我正在提交一个包含很多字段的表单,并尝试使用handleRequest($request)验证它,如Symfony文档中所示。 我的实体非常庞大,与其他实体有很多关系。 handleRequest($request)正在验证提交的每个表单字段并检查错误。

发现的问题是在提交我的主要实体的相关实体的ID(例如办公室的人)时,handleRequest将在内部获取相关实体的所有对象(相关的完整表格)实体,所有人)并将它们保湿为物体。

我认为应该检查提交的id是否存在于另一个表中,获取相关的实体对象并检查错误(而不是获取所有相关的表)。

如果您检查并调试Symfony2 handleRequest的源代码,您可能很容易在这一行发现同样的问题:

窗体/ form.php的

// Normalize data to unified representation
$normData = $this->viewToNorm($viewData);
$value = $transformers[$i]->reverseTransform($value);

如何在不处理此问题的情况下验证表单,这会导致使用handleRequest($request)验证表单的速度非常慢?

如果我不使用handleRequest来验证它,它会自动将错误添加到每个字段的表单中,我如何手动验证每个字段,然后将错误添加到我的表单中为每个字段添加并显示在下一个字段中查看?

1 个答案:

答案 0 :(得分:1)

这个问题有点模糊,答案很大程度上取决于你的具体形式。请发布给您最难的表格定义。

检查以确保您不是 EAGER 在此处获取关联。

handleRequest()将获取请求对象并构建表单所描述的模型,就像表单定义的那样。

如果需要对象才能在初始表单上向用户显示数据,或者在提交时验证数据,“ entity ”字段类型将获取您告知的所有对象它的定义。例如,如果要显示大选择列表,则需要所有这些数据。

我过去遇到过类似的问题,因为我使用了很多选择字段,这些字段被用作一系列多选复选框。我的瓶颈实际上是在树枝层,同时渲染出我作为单独实体存储的数千个复选框。

我从一组复选框切换到一个多选框,它显着提高了我的速度。