Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2表格错误_Php_Symfony - Fatal编程技术网

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>
但这会一个接一个地输出错误。我想在特定输入的位置显示它们:

{{myerrorforform.dueDate}}


非常感谢您的帮助

这是我的解决方案。我决定创建一个有错误的数组,并将其传递到视图(细枝)中。我花了一段时间才弄明白如何获取错误消息。。。但我们要做的是:

    // 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 %}