2013-01-15 15 views
9

私は、データベースからのエンティティの選択フィールドを持つフォームを持っている:フォーム選択タイプで特定のアイテムを無効にするにはどうすればよいですか?

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('categories', 'document', array(
     'class' => 'Acme\DemoBundle\Document\Category', 
     'property' => 'name', 
     'multiple' => true, 
     'expanded' => true, 
     'empty_value' => false 
    )); 
} 

このフォームは、チェックボックスのリストを作成し、としてレンダリングされます:私はアイテムの一部を無効にしたい

[ ] Category 1 
[ ] Category 2 
[ ] Category 3 

このリストの値では、私はそれを行うために選択フィールドの項目を傍受する必要があるかわかりません。

誰かが解決策を知っていますか?

+0

灰色にしたい、または最初に表示しないようにしますか? – Squazic

+0

私は 'finishView'で視覚的に無効にすることが可能であることを発見しました。 'setData'の間に無効な値を変更することを防ぐ方法を明確にするために残っています。 –

答えて

11

ちょうどfinishViewPRE_BINDイベントリスナーで処理しました。

+0

これは、私が厄介な状況から抜け出すのを助けました。ありがとうございました。 – Bogdan

+0

sfで何か変わる2.3 *?この解決策は私のためには役に立たない。 – Pawel

+2

これは安全ではありません.htmlが操作されている場合でも、選択は可能です。 – Nemo64

8

あなたは$form->add()'choice_attr'を使用してdisabled属性かを選択した値に応じて、キーまたはインデックスを追加するために天気をを決定する関数を渡すことができます。

... 
    'choice_attr' => function($key, $val, $index) { 
     $disabled = false; 

     // set disabled to true based on the value, key or index of the choice... 

     return $disabled ? ['disabled' => 'disabled'] : []; 
    }, 
... 
+1

このソリューションで何が問題になっていますか? IMhOそれは正しい方法です:http://symfony.com/doc/current/reference/forms/types/choice.html#choice-attr –

+0

@DavidKmentaは2.7より前のバージョンのSymfonyでは動作しません – nomistic

関連する問題