2013-06-12 5 views
13

Questa domanda è simile a another question. Ci the solution per l'impostazione della classe CSS è stato quello di aggiungerlo nel terzo parametro di una chiamata a FormBuilder :: add():Come impostare un attributo ID CSS a un input di modulo Symfony2

->add('title', null, array('attr' => array('class'=>'span2'))) 

Purtroppo, questo non funziona per l'impostazione della id CSS. Quando faccio

->add('title', null, array('attr' => array('id'=>'title-field'))) 

... questo è ignorato. L'ID rimane qualcosa come namespace_formtype_field.

Come posso impostare l'ID CSS, se non del tutto?

+1

Vuoi davvero modificare l'ID generato automaticamente? – Darmen

+1

Sfortunatamente, sì. Ho un'applicazione web che voglio trasferire su Symfony, ma ho bisogno di mantenere funzionanti i test di Javascript e funzionali. Alcuni di loro si basano su ID CSS. – Olav

+2

prova con twig {{form_widget (form, {'attr': {'id': 'title-field'}})}} – Nisam

risposta

1

Sono convinto che non ci sia una risposta facile. Il più vicino sembra infatti modificare il markup usando form theming. Grazie Michi per indicare in questo modo.

4

Poiché un elemento HTML non può avere più ID, ciò che si sta tentando di realizzare non è possibile perché Symfony utilizza già gli ID sugli elementi del modulo.

Il modo per risolvere questo sarebbe quello di cambiare il vostro supporto JavaScript per utilizzare classi invece e utilizzare

->add('title', null, array(
    'attr' => array(
     'class'=>'title-field' 
    ) 
)) 

L'altro modo è quello di cambiare il tuo ID JavaScript utilizza per quelli Symfony.

+0

Pier-Luc, grazie, ma uno dei tuoi suggerimenti significa che ho due versioni dei miei test e Javascript, una per Symfony, l'altra per l'altra implementazione. Preferirei evitare questo. – Olav

7

A livello ramoscello, si può semplicemente fare questo:

{{ form_widget(form. title, { 'id': 'title-field' }) }}

provata su Symfony 2.3.4

21

È possibile farlo quando si esegue il rendering il vostro campo in ramoscello, se si imposta il proprio ID al di fuori della matrice 'attributes' in questo modo:

{{ form_widget(form.field, { 'id': 'my_custom_id', 'attr': { 'class' : 'my_custom_class }})}} 
+1

La risposta "destra" corrente è errata. Nel tuo Twig puoi modificare l'ID come hai detto, questo è ESTREMAMENTE utile e applicabile, tuttavia fai attenzione a rendere unico il tuo ID o otterrai JS molto imprevedibile – Zjoia

Problemi correlati