Php Symfony2表格错误
我认为这是一个简单的问题。这是关于输出错误的。 这是我的小枝文件:Php Symfony2表格错误,php,symfony,Php,Symfony,我认为这是一个简单的问题。这是关于输出错误的。 这是我的小枝文件: <table> <tr> <td>{{ form_label(form.dueDate) }}</td> <td>{{ form_widget(form.dueDate) }}</td> <td>{{ form_errors(form.dueDate)
<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>
但这会一个接一个地输出错误。我想在特定输入的位置显示它们:
非常感谢您的帮助这是我的解决方案。我决定创建一个有错误的数组,并将其传递到视图(细枝)中。我花了一段时间才弄明白如何获取错误消息。。。但我们要做的是:
// 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>
{{form_标签(form.dueDate)}
{{form_小部件(form.dueDate)}
{{错误[form.dueDate.vars[“name”]]}
{{form_标签(form.task)}
{{form_小部件(form.task)}
{{错误[form.task.vars[“name”]]}
我希望它足够清晰。如果你需要帮助,请告诉我
如果有更简单的方法,请发布答案。您可以通过为自己的表单主题提供
字段\u 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... #}
在这种情况下,您可能希望将上面的
字段\u errors
块移动到app/Resources/views/form\u theme.html.twig
,并且表单\u theme
标记不再是必需的。还不能添加注释,但我想更新Kris Wallsmith的答案。现在这个块被称为form\u errors
,所以在第三行中它应该是{%block field\u errors%}
。我花了一段时间进行调查,希望有人能从中受益。另一个简单的解决方案(使用symfony 3测试):
{%for form.username.vars.errors%}
{{error.message}}
{%endfor%}
将“用户名”替换为表单字段。我不确定是否有办法做到这一点。可能需要编写一个新的细枝扩展(没有那么难,IIRC)。当然,快速简单的方法是从
ul
和li
中删除样式……我喜欢你的想法,但我相信有一种更简单的方法……如果我使用全局表单主题,我必须在表单模板中做些什么(不是form\u theme.html.twig
,而是我的实际表单本身)才能让它工作?可能是实现获取错误数组的更简单方法。
{# 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... #}
twig:
form: { resource: "::form_theme.html.twig" }
{% for error in form.username.vars.errors %}
{{ error.message }} <br/>
{% endfor %}