Symfony 3.2 - @Assert - 表单中错误位置的错误消息

时间:2017-03-02 00:57:19

标签: forms symfony assert

我正在Symfony 3.2中开展一个项目。

在这个项目中,我创建了一个Entity及其Form。为了验证字段,我使用了Symfony提供的Assert组件。

正如您将在下面的代码中看到的,我有2个字段具有完全相同的约束。

我有关于字段'firstName'错误消息的问题,该错误消息未显示在表单中的正确位置。它基本上显示在表单的顶部,而另一个字段的错误消息显示在字段旁边。

我不知道为什么一个字段的行为与其他字段不同。

以下是我的实体中的代码:

<?php

namespace SRC\MyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Client
 *
 * @ORM\Table(name="client")
 * @ORM\Entity(repositoryClass="SRC\MyBundle\Repository\ClientRepository")
 */
class Client
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="FirstName", type="string", length=255)
     * @Assert\NotBlank()
     * @Assert\Length(min=2,max=255)
     */
    private $firstName;

    /**
     * @var string
     *
     * @ORM\Column(name="LastName", type="string", length=255)
     * @Assert\NotBlank()
     * @Assert\Length(min=2,max=255)
     */
    private $lastName;

以下是我的表格中的代码:

<?php
namespace SRC\MyBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

use SRC\MyBundle\Entity\Client;

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\DateType;

class ClientType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstname',      TextType::class,        array('label'  => 'client.entity.firstName'))
            ->add('lastName',       TextType::class,        array('label'  => 'client.entity.lastName'))
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'SRC\MyBundle\Entity\Client'
        ));
    }
}

以下是表单嵌入视图的方式:

{% block table_body %}
    {% include "SRCMyBundle:Tools:pageTitle.html.twig" with {'action': 'edit'} %}
    <div class="container">
        <div class="row">
            <div class="col-xs-12">
                {{ form_start(form) }}
                    {{ form_widget(form) }}

                    <div class="formButtonsContainer">
                        <div class="formButtons">
                            <div class="btn-group">
                                <a class="btn btn-primary btn-sm" href="{{ zoomURL }}">{{ 'button.cancel'|trans }}</a>
                                <button type="submit" class="btn btn-danger btn-sm">{{ 'button.save'|trans }}</button>
                            </div>
                        </div>
                    </div>
                {{ form_end(form) }}
            </div>
        </div>
    </div>
{% endblock %}

从我使用的课程中你可能会猜到我正在使用Bootstrap。 我正在自定义表单以使其与Bootstrap兼容(从'form_div_layout.html.twig'重新定义一些块)但问题仍然存在,即使我回到标准丑陋的形式。

我试图强制选项'error_bubbling'为false,因为我在另一个主题中看到它可以链接但是它什么都没改变。

我觉得由于某种原因,表单无法将错误映射到字段,因此默认情况下将其发送到表单,但我只是在猜测。

有没有人有想法?

感谢您的帮助! :)

0 个答案:

没有答案