我試圖讓嵌入式窗體的錯誤消息顯示在有錯誤的表單字段旁邊。Symfony Doctrine OneToOne嵌入式表單error_bubbling
我有2個與OneToOne關係連接主義實體如下:
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種形式,一種爲聯繫人實體,一個是名稱的實體。然後我將姓名錶格嵌入到聯繫人表單中。
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
,這正是我想要的。
我哪裏錯了?
Matthew
感謝您的幫助德西。我已經嘗試了你所建議的一切,結果仍然是一樣的:(你是正確的我正在使用註釋進行驗證,這會有所作爲嗎? – mattvick
事實上,除去'error_bubbling'選項使得出現given_name錯誤在聯繫人表單上,而不是在名稱表單上(與以前一樣)。我想讓錯誤出現在Name窗體的實際given_name字段中。 – mattvick
有趣。我建議在你可以設置驗證組的bundle中嘗試一個validation.yml,但我想知道你的表單視圖代碼是否有什麼問題。你如何呈現表格?你是否使用自定義表單字段,並且可能會遺漏表單行的表單錯誤? –