У меня есть форма, которая сопоставлена с сущностью ('data_class' => ...
). У меня есть валидаторы, настроенные (через аннотации) для свойств сущности.
Сущность имеет свойство (nameTranslations
) типа доктрины array
. Я создал настраиваемый тип поля, состоящий из нескольких полей, которые назначаются этому полю в форме. Каждое из полей подчиненной формы (типа text
) имеет настройку валидаторов (NotBlank
) с помощью опции validation_constraint
.
Я пробовал различные аннотации проверки для свойства nameTranslations
, включая Valid()
. Я пробовал настройки error_bubbling практически на чем угодно. Подформа (поле nameTranslations
) вообще не проверяется.
Подформа:
class TranslatableTextType extends AbstractType
{
private $langs;
/**
* {@inheritDoc}
*/
public function __construct($multilang)
{
$this->langs = $multilang->getLangs();
}
/**
* {@inheritDoc}
*/
public function buildForm(FormBuilder $builder, array $options)
{
foreach($this->langs as $locale => $lang)
{
$builder->add($locale, 'text', array(
'label' => sprintf("%s [%s]", $options['label'], $lang),
'error_bubbling' => true,
));
}
}
/**
* {@inheritDoc}
*/
public function getDefaultOptions(array $options)
{
$constraints = [
'fields' => [],
'allowExtraFields' => true,
'allowMissingFields' => true,
];
foreach($this->langs as $locale => $lang)
{
$constraints['fields'][$locale] = new NotBlank();
}
$collectionConstraint = new Collection($constraints);
return [
'validation_constraint' => $collectionConstraint,
'label' => '',
'error_bubbling' => true
];
}
/**
* {@inheritDoc}
*/
public function getParent(array $options)
{
return 'form';
}
/**
* {@inheritDoc}
*/
public function getName()
{
return 'translatable_text';
}
}
В основной форме:
$builder->add('nameTranslations', 'translatable_text', [
'label' => 'Name'
]);
В сущности:
/**
* @var array
*
* @Assert\Valid
* @ORM\Column(type="array")
*/
protected $nameTranslations;