我正在提交一个包含许多字段的表单,并尝试使用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来验证它(它会自动将每个字段的错误添加到表单中),我如何手动验证每个字段,然后将每个字段的错误添加到表单中并在下一个视图中显示它们呢?
2条答案
按热度按时间uurv41yg1#
这个问题有点模糊,答案很大程度上取决于你的具体表单。请贴出给你最难的表单定义。
检查以确保您没有 * 急于 * 在此处获取关联。
handleRequest()
将获取request对象并构造表单所描述的模型,正如表单所定义的那样。如果需要这些对象才能在初始表单上向用户显示数据,或在提交时验证数据,则“entity”字段类型将获取您在其定义中指定的所有对象。例如,如果要显示一个大的选择列表,则需要所有这些数据。
我过去也遇到过类似的问题,因为我使用了大量的选择字段,这些字段被用作一系列的多选复选框。我的瓶颈实际上是在小枝层,在渲染数以千计的复选框时,我将其存储为单独的实体。
我从一组复选框切换到一个多选框,这大大提高了我的速度。
tcomlyy62#
在我的例子中,在有类似的行为之后,我发现这是我的xdebug配置中的一个问题。通过编辑php.ini并禁用xdebug,我发现一切都进行得更快了。当所有其他操作都失败时,做这个检查可能会很有趣。我在这里留下这条消息,以防它可能对其他人有所帮助。