2013-06-20 5 views
0

В моих объектах модели у меня есть User, который подключен через Enrollment в Organization.Symfony2 Form Вставить глубокие отношения в форму

User имеет 12:59 отношения с EnrollmentEnrollment и имеет многие к одному отношения с с Organization

Enrollment имеет атрибут утвержден

Когда пользователь регистрируется, я хотел бы для списка имен организаций в выпадающем списке выбора. Если создается User объект Enrollment, который соединяет User с Organization.

Поскольку нет прямой связи между User и Organization, представляется невозможным получить его в форме Symfony2.

Любые идеи о том, как встраивать глубокие отношения в форму? Если есть прямая ссылка, я обычно просто использую конструктор форм и добавляю объект, но теперь нет прямой ссылки.

ответ

0

Если вы можете быть уверены, что пользователь имеет каждый раз обучалось вы могли бы сделать что-то вроде этого:

$builder->add('organizations', 'entity', array('property_path' => 'enrollment.organizations',)); 

или другое решение могло бы быть, если определить QueryBuilder

$builder->add('organisations', 'entity', array(
      'class' => '%ENTITY_NAME%', 
      'query_builder' => function (%REPOSITORY_NAME% $repository) { 
       return %QUERY%; 
      } 
     )); 

или использовать прослушиватель событий

$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) use ($factory) { 
    $data = $event->getData();      
    if ($data->getEnrollment()) { 
     $organisations = $data->getEnrollment()->getOrganisations(); 
    } else { 
     $organisations = ... 
    } 
    $form = $event->getForm(); 
    $form->add($factory->createNamed('organizations', 'entity', $organisations, array('required' => false))); 
}); 
Смежные вопросы