2012-05-27 17 views
9

Mogłem to zrobić z Javascriptem, ale zastanawiałem się, czy mógłbym dodać klasę css do określonych opcji formy symfony2 (nie do samego pola wyboru, ale do indywidualnych wyborów).Jak mogę dodać klasy css do określonych opcji formularza symfony2?

Na przykład chcę zastosować różne style CSS do poszczególnych znaczników "opcji" wewnątrz "wybierz". Mogłem tylko znaleźć sposób na dodanie klasy do tagu.

Z góry dziękuję.

Odpowiedz

4

Możesz przesłonić układ określonych widżetów w formularzu, co oznacza, że ​​możesz przesłonić sposób renderowania i wstawić niestandardowy kod, aby sprawdzić, jaka jest wartość opcji i wypisać tam swoją niestandardową klasę.

Trzeba zastosować niestandardowy układ do swojej postaci, tak jak

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

Następnie wewnątrz pliku układu trzeba zastąpić konkretne pole dla tej konkretnej postaci (o ile oczywiście chcesz edytować choice_widget bezpośrednio w takim przypadku wszystkie pola, które korzystają z wyboru, będą miały tę funkcję).

Aby to zrobić trzeba skopiować widget, więc choice_widget, następnie wymienić go [_formName_fieldName_widget]

Więc jeśli nazwa była forma imprezy i nazwę pola był requireTickets, byłoby _events_requireTickets_widget

+0

dziękuję, nie potrzebowała nazwy klasy do zastosowania określonych stylów, ale kilka wtyczek jQuery zależało od pól o określonej klasie. Wolę nie edytować bezpośrednio wtyczek, więc to pomogło :) –

10

myślę możesz po prostu zrobić:

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

... jak wyjaśniono here, bez tworzenia własnego stylu formularza.

+0

... lub po prostu owinąć form_widget za pomocą np. Znacznika div i przypisać do niego atrybut. –

+6

To doda znacznik do wyboru i ewentualnie do opcji, ale nie pozwoli ci zastosować klas do poszczególnych opcji. – CriticalImpact

+0

@CriticalImpact masz rację, więc OP powinien stworzyć niestandardowy styl. – gremo

4

Odpowiedzi, które już zostały dostarczone, są bardzo dobre i myślę, że @ CriticalImpact jest najbardziej elastyczny. Ale chciałem tylko wspomnieć, że jeśli używasz klasy formularza, można również dodać dodatkowe atrybuty do pola poprzez formularz definicji samego budowniczego:

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

Znalazłem ten pomocne dla podstawowych form, ponieważ nadal pozwala wykonać proste wywołanie {{ form(someForm) }} w pliku Twig.

(Zauważ, że to rozwiązanie ma jeszcze tę wadę, że @CriticalImpact wspomniany above)

0

dodać atrybuty jak style CSS do indywidualnych wyborów w dzisiejszych czasach może być osiągnięte z choice_attr, np:

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)]; 
    }, 
)); 
Powiązane problemy