Symfony : Valoarea by default pentru Entity radio buttons

Am o problema si nu reusesc sa ii dau de capat.

Am un Entity (Priority). Valorile posibile sunt stocate in baza de date si sunt incarcate cu ajutorul doctrine fixtures.

Asadar am 3 valori : low / medium / high

Acum, pentru a afisa in formular valorile utilizez :

/**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        // ... celelalte elemente ale formularului
        ->add('priority', 'entity', array(
            'class' => 'CompanyTaskBundle:TaskPriority',
            'expanded' => TRUE,
        ))
        ;
    } 

si in twig :

{{ form_row(currentEntityForm.priority) }}

Pana aici toate bune si frumoase. Optiunile se afiseaza asa cum trebuie.

Problema mea este ca vreau ca valoarea “low” sa fie selectata by default.

O prima idee a fost de a adauga in Entity o proprietate isSelected si sa ma bazez pe asta pentru a afisa valoarea “by default”. Problema aici ar fi ca in partea de Twig ar trebui sa ma apuc sa rescriu generatorul de radio buttons pentru a tine cont de aceasta noua proprietate si mi se pare o “solutie” cam nepotrivita.

Are careva vreo idee?

Postul meu n-o sa te ajute cu nimic. Vreau doar sa zic:

Lumea care foloseste generatoare de formulare isi merita toate problemele care vin cu ele. Nu va doresc decat sa lucrati dupa cineva care a folosit asa ceva sa vedeti cum e. Daca esti in cazul din urma, I feel for you man.

Nu știu dacă doar mi s-a părut, dar parcă mai devreme era un comentariu despre cei ce folosesc generatoare de formulare care-și merită soarta (de la @AdrianBasalic ?) cu care eram întru totul de acord! :stuck_out_tongue:
Deasemenea, aș mai adăuga că urăsc îmbârligătura care este Symfony, cu toate clasele și interfețele ei. (Dacă puteau, cred c-ar fi creat o clasă care să pună punctul pe “i”)

Dar, ca să fiu și un pic constructiv, vezi dacă asta te-ajută:

$form = $builder->getForm();
$form->get('priority')->setData($defaultValue);

Da, ai dreptate eferitor la generatoarele de formulare :slight_smile:

Acum revenind la problema - am uitat sa specific un mic-mare aspect - faptul ca treaba e putin mai complicata pentru ca formularul e tratat intr-un bundle parinte si nu prea am acces direct la elementele lui in controller.

De aceea solutia trebuie sa fie in FormType sau direct in partea de Twig.

Acum incerc sa folosesc FormType ca service si sa ii injectez entity_manager-ul, urmand ca apoi sa il folosesc in el. Nu mi se pare deloc o solutie eleganta, dar sa vad daca merge…

Mno, atata timp cat autorul threadului nu considera ca discutia despre generatoare e offtopic, ii dau undelete la postul lui @AdrianBasalic (cu care intamplator sunt si eu intru totul de acord :smile:).

Nu e offtopic pentru ca e reala treaba…

Anyway, I still need help :smiley:

Nu recomand așa ceva în general, dar ai putea-o rezolva într-o linie:

!$('[name="priority"]:checked').size() && $('[name="priority"]:first').click();

:smirk:

@IonutBotizan - Cum nu reusesc nicicum sa o scot la capat sa stii ca m-am gandit sa optez pentru o solutie JS

Toata istoria asta cu bundle-ul parinte ma oboseste si ma cam leaga teribil la maini (si la picioare)…

Sau tot din buildForm(): http://stackoverflow.com/a/15529083/867743

1 Like

AbstractType mai are niste metode care te ajuta sa modifici formularul dupa nevoi: buildView si finishView, si nu mai trebuie sa suprascrii generator din twig (pentru ca nu adagi o proprietate noua, doar modifici una existenta).

Tot din documentatie:

if you need to modify the “view” of any of your child types from your parent type, use the finishView() method.

Am uitat sa scriu aici concluzia

Am rescris ceva chestii in parinte si pana la urma l-am facut sa mearga.

Buba era din bundle-ul parinte care trata formularul…

Asa e cand oamenii prefera sa faca solutii generice, dar complice si imbarligate.

Merci tuturor pentru sugestii