【发布时间】:2014-03-08 09:46:49
【问题描述】:
我正在尝试获取嵌入表单的错误消息,以显示在有错误的表单字段旁边。
我有 2 个通过 OneToOne 关系连接的 Doctrine 实体,如下所示:
class Contact
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id
/**
* @ORM\OneToOne(targetEntity="Name", mappedBy="contact", cascade={"persist"})
*/
protected $name;
}
class Name
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id
/**
* @var string $givenName
*
* @ORM\Column(type="string", name="given_name", length=255)
* @Assert\NotBlank(
* message="Given name must not be blank."
* )
* @Assert\Length(
* min="2",
* max="255",
* minMessage="Given name is too short.",
* maxMessage="Given name is too long."
* )
*/
protected $givenName;
}
我创建了 2 个表单,一个用于 Contact 实体,一个用于 Name 实体。然后我将 Name 表单嵌入到 Contact 表单中。
class ContactType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', new NameType());
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => AcmeCoreBundle\Entity\Contact,
'cascade_validation' => true,
'error_bubbling' => false,
));
}
public function getName()
{
return 'acme_contact';
}
}
class NameType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('given_name', 'text', array(
'required' => true,
'error_bubbling' => false,
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => AcmeCoreBundle\Entity\Name,
'error_bubbling' => false,
));
}
public function getName()
{
return 'acme_name';
}
}
我已在“联系”表单(即根表单)上将cascade_validation 设置为true,并在所有级别将error_bubbling 设置为false。我已经测试了这些配置选项并且正在设置它们。
但是,错误消息附加到form.name 而不是form.name.given_name,这正是我想要的。
我哪里错了?
马修
【问题讨论】:
标签: php forms symfony error-handling doctrine-orm