У меня есть два объекта: Company
и Location
. Одна компания имеет одно местоположение (в то время как одно место может иметь «несколько компаний»). Теперь, когда пользователь создает компанию, я хочу, чтобы он/она мог иметь возможность создать местоположение в той же форме. Поэтому я использую следующиеПроверка использования объекта FormType внутри формы
$builder
->add('name', TextType::class, ['label' => 'company.name'])
->add('size', IntegerType::class, ['label' => 'company.size'])
->add($builder->create('location', FormType::class, [
'label' => 'company.location',
'by_reference' => true,
'data_class' => 'AppBundle\Entity\Location',
])
->add('street', TextType::class, [
'label' => 'location.street',
])
->add('number', TextType::class, [
'label' => 'location.number',
])
Это прекрасно работает при создании формы. Теперь речь идет о проверке. Я добавил @Assert
аннотации для обоих объектов в своих соответствующих файлах. Пока company
валидационные работы, location
не получает автоматическую проверку.
мне удалось получить подтверждение, добавив constraint
свойства новых $builder->create('location')
элементов, но это означает, что скопированный код (один раз в Сущности и по крайней мере один раз в любой форме, которая нуждается location
).
Как я могу решить эту проблему, чтобы форма была подтверждена с помощью аннотации объекта?
не лучше создавать пользовательский валидатор (для обработки случая местоположение уже существует или компания не может находиться в местоположении ...)? если это см. http://symfony.com/doc/current/cookbook/validation/custom_constraint.html – mboullouz
@ εEridani Хорошая идея (я совершенно новый для symfony ..). Теперь ошибка появляется над формой и не отображается в поле. Я попробовал ['error_mapping'] (https://symfony.com/doc/current/reference/forms/types/text.html#error-mapping), но, похоже, не может заставить его работать (используется' .' on левая сторона, все еще появляется выше формы) – kero
Используйте «Ограничения класса», а затем в контексте выполните что-то вроде: public function validate ($ myLocationEntity, ограничение ограничения) { context-> addViolationAt ('FIELD_NAME', 'область дублирования или некоторое сообщение randome ", array(), null); } затем в веточке вы должны добавить: {{form_errors (form.FIELD_TO_VALIDATE)}} – mboullouz