2016-03-22 2 views
0

У меня есть два объекта: 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).

Как я могу решить эту проблему, чтобы форма была подтверждена с помощью аннотации объекта?

+0

не лучше создавать пользовательский валидатор (для обработки случая местоположение уже существует или компания не может находиться в местоположении ...)? если это см. http://symfony.com/doc/current/cookbook/validation/custom_constraint.html – mboullouz

+0

@ εEridani Хорошая идея (я совершенно новый для symfony ..). Теперь ошибка появляется над формой и не отображается в поле. Я попробовал ['error_mapping'] (https://symfony.com/doc/current/reference/forms/types/text.html#error-mapping), но, похоже, не может заставить его работать (используется' .' on левая сторона, все еще появляется выше формы) – kero

+1

Используйте «Ограничения класса», а затем в контексте выполните что-то вроде: public function validate ($ myLocationEntity, ограничение ограничения) { context-> addViolationAt ('FIELD_NAME', 'область дублирования или некоторое сообщение randome ", array(), null); } затем в веточке вы должны добавить: {{form_errors (form.FIELD_TO_VALIDATE)}} – mboullouz

ответ

Смежные вопросы