gpt4 book ai didi

php - Symfony主义OneToOne嵌入式表单error_bubbling

转载 作者:行者123 更新时间:2023-12-03 07:54:48 26 4
gpt4 key购买 nike

我正在尝试获取嵌入表单的错误消息,以显示在具有错误的表单字段旁边。

我有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种形式,一种用于Contact实体,一种用于Name实体。然后,我将“姓名”表单嵌入“联系人”表单。
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,这是我想要的。

我要去哪里错了?

马修

最佳答案

解决了!

对于遇到类似问题的任何人,问题都在于表单字段的命名。

在我的实体中,该属性是使用camelCase命名的,如下所示:

protected $givenName;

但是,在我的表单中,我使用下划线符号命名该字段,因为我认为这是惯例。
$builder->add('given_name', 'text');

这对于除错误冒泡之外的所有内容都适用。简单的解决方案是按如下方式重命名我的字段:
$builder->add('givenName', 'text');

我希望这可以帮助别人 :)

关于php - Symfony主义OneToOne嵌入式表单error_bubbling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com