2012-05-27 9 views
9

Potrei farlo con Javascript, ma mi chiedevo se potevo aggiungere una classe css a specifiche scelte di forma di symfony2 (non il campo di scelta in sé, ma le singole scelte).Come posso aggiungere le classi css alle scelte specifiche del modulo symfony2?

Ad esempio, desidero applicare diversi stili css a singoli tag di "opzione" all'interno di una "selezione". Ho potuto trovare solo un modo per aggiungere una classe al tag.

Grazie in anticipo.

risposta

4

È possibile sovrascrivere il layout di widget specifici nel modulo, il che significa che è possibile ignorare il modo in cui il rendering di selezione e inserire il codice personalizzato per verificare qual è il valore dell'opzione e generare lì la classe personalizzata.

è necessario applicare un layout personalizzato per il modulo, in questo modo

{% form_theme form 'form_theme.html.twig' %} 

Poi all'interno del file di layout è necessario ignorare il campo specifico per quella specifica forma (a meno che naturalmente si desidera modificare il choice_widget direttamente nel qual caso tutti i campi che usano la scelta avranno la funzionalità).

Per fare questo è necessario copiare il widget, in modo choice_widget, quindi denominarlo [_formName_fieldName_widget]

Così, se il nome del modulo è stato eventi e il vostro nome del campo era requireTickets, sarebbe _events_requireTickets_widget

+0

Grazie, non aveva bisogno del nome della classe per applicare stili specifici, ma alcuni plugin jQuery dipendevano dai campi

10

penso si può semplicemente fare:

{{ form_widget(form.name, { 'attr' : { 'class' : 'myClass' } }) }} 

... come spiegato here, senza creare il proprio stile modulo.

+0

... oppure basta avvolgere form_widget con e.g un tag div e assegnarvi un attributo. –

+6

Questo aggiungerà il tag alla selezione e possibilmente alle opzioni ma non consentirà di applicare le classi alle singole opzioni. – CriticalImpact

+0

@CriticalImpact hai ragione, quindi OP dovrebbe creare uno stile personalizzato. – gremo

4

Le risposte già fornite sono molto buone e penso che @ CriticalImpact sia il più flessibile. Ma volevo solo dire che se si sta utilizzando un modulo di classe, è anche possibile aggiungere attributi extra al campo tramite la definizione del modulo costruttore stesso:

class SomeType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('someField', "text", array("attr" => array("class" => "someCssClass"))) 
      ->add("save", "submit"); 
    } 
} 

ho trovato questa utile per le forme di base, a causa consente comunque di effettuare una semplice chiamata {{ form(someForm) }} nel file Twig.

(Si noti che questa soluzione ha ancora l'inconveniente che @CriticalImpact menzionato above)

0

aggiungere attributi come gli stili CSS per le scelte individuali possono oggi essere raggiunte con choice_attr, ad esempio:

use Symfony\Component\Form\Extension\Core\Type\ChoiceType; 
// ... 

$builder->add('attending', ChoiceType::class, array(
    'choices' => array(
     'Yes' => true, 
     'No' => false, 
     'Maybe' => null, 
    ), 
    'choice_attr' => function($val, $key, $index) { 
     // adds a class like attending_yes, attending_no, etc 
     return ['class' => 'attending_'.strtolower($key)]; 
    }, 
)); 
Problemi correlati