Я пытаюсь получить сообщение об ошибке для встроенной формы для отображения рядом с полем формы с ошибкой.Symfony Doctrine OneToOne встроенная форма error_bubbling
У меня 2 Doctrine объекты, связанные со связью 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' повсюду сделало ошибку данного_имя в форме «Контакт», а не в форме «Имя» (как и раньше).Я хочу, чтобы ошибка появлялась в поле actual_name в форме Name. – mattvick
Интересно. Я рекомендую попробовать validation.yml в комплекте, где вы можете установить группу проверки, но мне интересно, есть ли что-то, что происходит с вашим кодом вида формы. Как вы представляете форму? Вы используете пользовательские поля формы и, возможно, не учитываете форму-ошибку для строки формы? –