我正在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,因为我在另一个主题中看到它可以链接但是它什么都没改变。
我觉得由于某种原因,表单无法将错误映射到字段,因此默认情况下将其发送到表单,但我只是在猜测。
有没有人有想法?
感谢您的帮助! :)