如何调试Symfony2表单?

时间:2014-06-26 16:49:19

标签: symfony fosuserbundle symfony-2.5

我正在创建一个注册页面,以根据FOSUserBundle创建一个新用户。

每次提交新用户表单时,我都会在表单顶部显示此消息: 该值不应为空白。

显然这是一个全局消息,它没有链接到我的表单上的特定字段,所以我想它必须与我的User类的任何其他属性相关。

Sf2提供了什么机制来弄清楚我的表单上有什么问题? 我正在使用Symfony 2.5.0

(我会发布有关我的配置,用户类和表单的更多详细信息......但我真的想学习如何自己找到这个问题)

先谢谢社区!

5 个答案:

答案 0 :(得分:1)

查看dev前端控制器上的调试工具栏,它是开始的良好调试方式

答案 1 :(得分:0)

这是一个难以追踪的棘手错误。我自己无法跟踪这些类型的错误,因此我搜索了Google和SO。我找到了用我的表格解释问题的答案。这是一个未包含在表单中的字段之一的验证规则。

所以,在你的情况下,这也可能是原因。对于未包含在表单中的字段,可能存在验证规则(很可能是NotBlank)。只是尝试逐个禁用它们以找到导致此错误的字段。

答案 2 :(得分:0)

我认为您应该尝试打印$request->get('name_of_your_form'),并在将其与表单绑定后,尝试打印$form->getData()。应该足以明确哪个领域导致问题。

另请注意validation groups

答案 3 :(得分:0)

尝试使用$form->getErrorsAsString()$form->getErrors()方法将表单错误打印为字符串。

取自source

/**
 * Returns a string representation of all form errors (including children errors).
 *
 * This method should only be used to help debug a form.
 *
 * @param int     $level The indentation level (used internally)
 *
 * @return string A string representation of all errors
 *
 * @deprecated Deprecated since version 2.5, to be removed in 3.0. Use
 *             {@link getErrors()} instead and cast the result to a string.
 */
public function getErrorsAsString($level = 0)
{
    return self::indent((string) $this->getErrors(true, false), $level);
}

答案 4 :(得分:0)

你应该在/ _profiler的日志中看到错误和更多描述,甚至可能是SQL错误,这可能导致问题的根源。