我认为这是一个简单的问题。它关于输出错误。 这是我的枝条文件:
<table>
<tr>
<td>{{ form_label(form.dueDate) }}</td>
<td>{{ form_widget(form.dueDate) }}</td>
<td>{{ form_errors(form.dueDate) }}</td>
</tr>
<tr>
<td>{{ form_label(form.task) }}</td>
<td>{{ form_widget(form.task) }}</td>
<td>{{ form_errors(form.task) }}</td>
</tr>
</table>
现在每个错误都显示(td with form_errors()):
&LT; UL&GT;&LT; li&gt;该值不应为空白&lt; /立GT;&LT; / UL&GT;
我的问题是:我想将错误输出为纯文本(没有ul和li)。
我知道有一个这样的例子:
{% for error in errors %}
{{ error.message }}
{% endfor %}
但这会一个接一个地输出错误。我想在特定输入的位置显示它们:
&LT; td&gt; {{myErrorFor form.dueDate}}&lt; / TD&GT;
非常感谢任何帮助
答案 0 :(得分:13)
您可以通过提供带有field_errors
块的自己的表单主题来自定义表单错误的呈现方式。
您只能为当前模板执行此操作:
{# tell the form to look for theme blocks in the current template #}
{% form_theme form _self %}
{% block field_errors %}
{% for error in errors %}
{{ error.messageTemplate|trans(error.messageParameters, 'validators') }}<br>
{% endfor %}
{% endblock %}
{# the rest of your template... #}
或者通过在config.yml
中定义全局表单主题:
twig:
form: { resource: "::form_theme.html.twig" }
在这种情况下,您可能希望将上面的field_errors
块移至app/Resources/views/form_theme.html.twig
,并且不再需要form_theme
标记。
答案 1 :(得分:2)
这是我的解决方案。我决定创建一个包含错误的数组并将其传递给视图(twig)。我花了一段时间才弄清楚如何获取错误消息......但是我们走了:
// Controller example:
public function indexAction(Request $request)
{
$task = new \Michael\MikeBundle\Entity\Task();
$task->setTask('Write a blog post');
$task->setDueDate(new \DateTime('tomorrow'));
$form = $this->createFormBuilder($task)
->add('task', 'text',
array('attr' => array('title' => 'Enter Task')))
->add('dueDate', 'date', array(
'widget' => 'single_text',
'required' => false,
'attr' => array('title' => 'Insert due date')))
->getForm();
// If user submitted code
if ($request->getMethod() == 'POST') {
// Get form part from request
$request->request->get('form');
// Bind request into the form
$form->bindRequest($request);
}
// Pass into the view
return array('errors' => $this->_getErrors($form), 'form' => $form->createView());
}
protected function _getErrors($form)
{
// Validate form
$errors = $this->get('validator')->validate($form);
// Prepare collection
$collection = array();
// Loop through each element of the form
foreach ($form->getChildren() as $key => $child) {
$collection[$key] = "";
}
foreach ($errors as $error) {
$collection[str_replace("data.", "", $error->getPropertyPath())] = $error->getMessage();
}
return $collection;
}
重要的部分是方法_getErrors($ form),因为它返回一个这样的数组(如果有错误)
$ errors ['task'] =此值不应为空
$ errors ['dueDate'] =“”
这是小部分:
<table>
<tr>
<td>{{ form_label(form.dueDate) }}</td>
<td>{{ form_widget(form.dueDate) }}</td>
<td>{{ errors[form.dueDate.vars["name"]] }}</td>
</tr>
<tr>
<td>{{ form_label(form.task) }}</td>
<td>{{ form_widget(form.task) }}</td>
<td>{{ errors[form.task.vars["name"]] }}</td>
</tr>
</table>
我希望它足够清楚。如果您需要帮助,请告诉我。
如果有更简单的方法,请发帖回答。
答案 2 :(得分:1)
暂时无法添加评论,但我想更新Kris Wallsmith的答案。现在这个块被称为form_errors
,所以在第3行它应该是{% block field_errors %}
。我花了一段时间进行调查,希望有人能从中受益。
答案 3 :(得分:1)
另一个简单的解决方案(使用symfony 3测试):
{% for error in form.username.vars.errors %}
{{ error.message }} <br/>
{% endfor %}
替换&#39;用户名&#39;与您的表单字段。