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

jxct1oxe  于 2023-02-15  发布在  PHP
关注(0)|答案(2)|浏览(110)

我正在提交一个包含许多字段的表单,并尝试使用handleRequest($request)验证它,如Symfony文档中所示。我的实体非常大,并且与其他实体有很多关系。handleRequest($request)正在验证提交的每个表单字段并检查错误。
发现的问题是,当提交我的主实体的相关实体的ID时(例如,办公室的人员),handleRequest将在内部获取相关实体的所有对象(相关实体的完整表,所有人员),并将它们水合为对象。
我认为它应该只检查提交的id是否存在于另一个表中,获取相关的实体对象并检查它是否有错误(而不是获取所有相关的表)。
如果您检查并调试Symfony 2 handleRequest的源代码,您可能很容易在以下代码行中发现相同的问题:

表单/表单.php

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

如果不处理这个问题,我怎么还能验证表单呢?这个问题使得用handleRequest($request)验证表单非常慢。
如果我不使用handleRequest来验证它(它会自动将每个字段的错误添加到表单中),我如何手动验证每个字段,然后将每个字段的错误添加到表单中并在下一个视图中显示它们呢?

uurv41yg

uurv41yg1#

这个问题有点模糊,答案很大程度上取决于你的具体表单。请贴出给你最难的表单定义。
检查以确保您没有 * 急于 * 在此处获取关联。
handleRequest()将获取request对象并构造表单所描述的模型,正如表单所定义的那样。
如果需要这些对象才能在初始表单上向用户显示数据,或在提交时验证数据,则“entity”字段类型将获取您在其定义中指定的所有对象。例如,如果要显示一个大的选择列表,则需要所有这些数据。
我过去也遇到过类似的问题,因为我使用了大量的选择字段,这些字段被用作一系列的多选复选框。我的瓶颈实际上是在小枝层,在渲染数以千计的复选框时,我将其存储为单独的实体。
我从一组复选框切换到一个多选框,这大大提高了我的速度。

tcomlyy6

tcomlyy62#

在我的例子中,在有类似的行为之后,我发现这是我的xdebug配置中的一个问题。通过编辑php.ini并禁用xdebug,我发现一切都进行得更快了。当所有其他操作都失败时,做这个检查可能会很有趣。我在这里留下这条消息,以防它可能对其他人有所帮助。

相关问题