2012-05-27 66 views
9

我可以用Javascript做到這一點,但我想知道如果我可以添加一個CSS類到特定的symfony2表單選擇(而不是選擇字段本身,但個人選擇)。如何添加css類到特定的symfony2表單選項?

例如,我想將不同的css樣式應用於'選擇'中的單個「選項」標籤。我只能找到一種方法來添加一個類到標籤。

在此先感謝。

回答

4

您可以覆蓋表單中特定窗口小部件的佈局,這意味着您可以覆蓋選擇呈現並放入自定義代碼的方式,以檢查選項的值是多少,並在那裏輸出您的自定義類。

您需要自定義佈局應用到您的形式,像這樣

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

則佈局文件中,你需要重寫的特定領域爲特殊形式(當然,除非你要編輯的choice_widget直接在這種情況下使用選擇的所有字段將具有該功能)。

要做到這一點,你需要複製的部件,所以choice_widget,然後將其命名[_formName_fieldName_widget]

所以,如果你的表單名稱是事件和您的字段名稱是requireTickets,這將會是_events_requireTickets_widget

+0

謝謝你,我不需要類名來應用特定的樣式,但少數jQuery插件依賴於具有特定類的

10

我想你可以簡單地做:

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

...如解釋here,沒有創建自己的窗體樣式。

+0

...或者您只需用例如div標籤包裝form_widget併爲其分配屬性即可。 –

+6

這會將標籤添加到選擇並可能添加到選項,但它不會讓您將類應用到單個選項。 – CriticalImpact

+0

@CriticalImpact你是對的,所以OP應該創建一個自定義樣式。 – gremo

4

已經提供的答案非常好,我認爲@ CriticalImpact是最靈活的。但我只是想提一提,如果你使用一個窗體類,你也可以到外地通過表單生成器定義本身添加額外的屬性:

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

,我發現這是很有幫助的基本形式,是因爲它仍然允許您在Twig文件中進行簡單的{{ form(someForm) }}調用。

(注意,這個解決方案仍然有@CriticalImpact提到above缺點)

0

添加屬性,如CSS樣式個人的選擇如今可以用choice_attr實現,如:

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)]; 
    }, 
)); 
相關問題