Witajcie,
Tworzę FormType z dynamicznie dodającym się polem na podstawie artykułu: http://symfony.com/doc/current/form/form_collections.html. Generalnie wszystko działa jak należy. Oto kawałek kodu:
$formModifier = function (FormInterface $form, Category $category = null) {
$subcategories = null === $category ? array() : $category->getSubcategories();
$form->add('subcategory', EntityType::class, array(
'class' => 'AppAnnouncementBundle:Subcategory',
'choice_label' => 'title',
'placeholder' => false,
'choices' => $subcategories,
'label' => 'Podkategoria:',
'attr' => ['class' => 'bootstrap-select subcategory-select']
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier){
$data = $event->getData();
$formModifier($event->getForm(), $data->getCategory());
}
);
$builder->get('category')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$category = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $category);
}
);
Tak jak pisałem wszystko dodaje i waliduje się poprawnie. Nie wiem jednak jak mógłbym zmienić kolejność w której wyświetlają się opcje wyboru pola subcategory. Chciałbym aby wyświetlały się na podstawie kolumny ord w bazie. Gdyby było to zwykłe pole typu entity zrobiłbym to następująco:
->add('parent', EntityType::class,
array(
'class' => 'AppAnnouncementBundle:Features',
'choice_label' => 'name',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('n')
->where('n.category = :n')
->setParameter('n', $this->category_id)
->orderBy('n.name', 'ASC');
},
'multiple' => false,
'attr' => ['class' => 'type-choice parent-bs show-tick'],
'label' => 'Rodzic:',
'label_attr' => ['data-original-title' => 'Rodzic:', 'data-content' => 'Wskaż cechę od której tworzona cecha będzie zależna.'],
'placeholder' => 'Rodzic',
'required' => false
)
)
Ktoś z was będzie w stanie nakierować? Z góry dziękuję za pomoc...