Symfony3 dynamiczne dodawanie pola do formularza i kolejność opcji wyboru

0

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...

0

Wystarczy w encji dodać do relacji instrukcję sortowania np:

    /**
     * @ORM\OneToMany(targetEntity="Products", mappedBy="parent", cascade={"remove"})
     * @ORM\OrderBy({"ord" = "DESC"})
     * @Assert\Valid()
     */
    private $products;

Dzięki temu "geter" zawsze będzie zwracał posortowane wyniki, niezaleznie gdzie zostanie użyty, czy to w kontrolerze, serwisie czy też form builderze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1