如何浏览表单错误
How to browse the form errors
我想浏览表单错误,但它对我不起作用。
我在没有 ajax 的情况下尝试过,但这是错误
An exception has been thrown during the rendering of a template ("Notice: Array to string conversion")
in AppBundle:Admin:errors-form.html.twig at line 5.
我认为问题在于如何使用 twig 循环这一行:
'data' => $this->getErrorMessages($form),
这是代码
protected function getErrorMessages(\Symfony\Component\Form\Form $form)
{
$errors = array();
foreach ($form->getErrors() as $key => $error) {
$errors[] = $error->getMessage();
}
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
return $errors;
}
public function addAction(Request $request)
{
if ($form->isValid()) {
//..
} else {
$view = $this->renderView(
'AppBundle:Admin:errors-form.html.twig', array(
'data' => $this->getErrorMessages($form),
)
);
$response = new JsonResponse(array(
'view' => $view,
'result' => 0,
'message' => 'Invalid form',
)
);
return $response;
}
}
这是在出现错误时使用 JsonResponse 返回的视图,但不会显示错误,但是如果我在此视图中放置静态文本,它将在提交后出现
<div id="error">
{% for error in data %}
{{ error }}
{% endfor %}
</div>
如果你只想获取错误并在树枝中显示它们,则不需要 getErrorMessages
。您可以将表单 $form
传递给视图:
public function addAction(Request $request)
{
if ($form->isValid()) {
//..
} else {
$view = $this->renderView(
'AppBundle:Admin:erreurs-form.html.twig', array(
'form' => $form,
)
);
$response = new JsonResponse(array(
'view' => $view,
'result' => 0,
'message' => 'Invalid form',
)
);
return $response;
}
}
并使用 twig 中的内置 form_errors
来获取错误并显示它们:
{% if form_errors(form) %}
<div id="error">
{{ form_errors(form) }}
</div>
{% endif %}
或者可以通过以下方式获取控制器中的错误:
$view = $this->renderView(
'AppBundle:Admin:erreurs-form.html.twig', array(
'data' => $form->getErrors()
)
);
并使用它在树枝中处理它:
<div id="error">
{% for error in data %}
{{ error.message }}
{% endfor %}
</div>
getErrors
方法仅 returns 表单的第一级,即表单本身而不是其子项。
您需要提供布尔参数以在表单中深入搜索方法:getErrors(true)
protected function getErrorMessages(\Symfony\Component\Form\Form $form)
{
// ...
foreach ($form->getErrors(true) as $key => $error) {
$errors[] = $error->getMessage();
}
// ...
return $errors;
}
参见 symfony 文档 http://symfony.com/doc/current/components/form/introduction.html#accessing-form-errors
编辑
开头没注意。您模板中的错误是由以下代码引起的:
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
$this->getErrorMessages($child)
实际上是返回一个数组,而不是字符串。您需要做如下操作:
foreach ($form->all() as $child) {
if (!$child->isValid()) {
foreach ($this->getErrorMessages($child) as $error) {
$errors[$child->getName()] .= ' '.$error
}
}
}
一定是两个 {% for %} 循环,我已经这样修复了,现在可以正常使用了。
<div id="error">
{% for data in data %}
{% for error in data %}
{{ error }}<br>
{% endfor %}
{% endfor %}
</div>
我想浏览表单错误,但它对我不起作用。
我在没有 ajax 的情况下尝试过,但这是错误
An exception has been thrown during the rendering of a template ("Notice: Array to string conversion")
in AppBundle:Admin:errors-form.html.twig at line 5.
我认为问题在于如何使用 twig 循环这一行:
'data' => $this->getErrorMessages($form),
这是代码
protected function getErrorMessages(\Symfony\Component\Form\Form $form)
{
$errors = array();
foreach ($form->getErrors() as $key => $error) {
$errors[] = $error->getMessage();
}
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
return $errors;
}
public function addAction(Request $request)
{
if ($form->isValid()) {
//..
} else {
$view = $this->renderView(
'AppBundle:Admin:errors-form.html.twig', array(
'data' => $this->getErrorMessages($form),
)
);
$response = new JsonResponse(array(
'view' => $view,
'result' => 0,
'message' => 'Invalid form',
)
);
return $response;
}
}
这是在出现错误时使用 JsonResponse 返回的视图,但不会显示错误,但是如果我在此视图中放置静态文本,它将在提交后出现
<div id="error">
{% for error in data %}
{{ error }}
{% endfor %}
</div>
如果你只想获取错误并在树枝中显示它们,则不需要 getErrorMessages
。您可以将表单 $form
传递给视图:
public function addAction(Request $request)
{
if ($form->isValid()) {
//..
} else {
$view = $this->renderView(
'AppBundle:Admin:erreurs-form.html.twig', array(
'form' => $form,
)
);
$response = new JsonResponse(array(
'view' => $view,
'result' => 0,
'message' => 'Invalid form',
)
);
return $response;
}
}
并使用 twig 中的内置 form_errors
来获取错误并显示它们:
{% if form_errors(form) %}
<div id="error">
{{ form_errors(form) }}
</div>
{% endif %}
或者可以通过以下方式获取控制器中的错误:
$view = $this->renderView(
'AppBundle:Admin:erreurs-form.html.twig', array(
'data' => $form->getErrors()
)
);
并使用它在树枝中处理它:
<div id="error">
{% for error in data %}
{{ error.message }}
{% endfor %}
</div>
getErrors
方法仅 returns 表单的第一级,即表单本身而不是其子项。
您需要提供布尔参数以在表单中深入搜索方法:getErrors(true)
protected function getErrorMessages(\Symfony\Component\Form\Form $form)
{
// ...
foreach ($form->getErrors(true) as $key => $error) {
$errors[] = $error->getMessage();
}
// ...
return $errors;
}
参见 symfony 文档 http://symfony.com/doc/current/components/form/introduction.html#accessing-form-errors
编辑
开头没注意。您模板中的错误是由以下代码引起的:
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
$this->getErrorMessages($child)
实际上是返回一个数组,而不是字符串。您需要做如下操作:
foreach ($form->all() as $child) {
if (!$child->isValid()) {
foreach ($this->getErrorMessages($child) as $error) {
$errors[$child->getName()] .= ' '.$error
}
}
}
一定是两个 {% for %} 循环,我已经这样修复了,现在可以正常使用了。
<div id="error">
{% for data in data %}
{% for error in data %}
{{ error }}<br>
{% endfor %}
{% endfor %}
</div>