2016-05-06 12 views
1

Symfony 3では、選択リストメニューの 'プレースホルダ'を表示しないようにしたい選択可能である)を選択することができる。私MyEntityTypeのsymfony 3 - フォームの選択: "placeholder"に 'disabled' = trueを設定する方法

関数buildFormは()、拡張AbstractTypeは次のようになります。私はドキュメントを見てみると

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

    $list = array([array with choices values and descriptions]); 
    $builder 
    ->add('description',TextType::class, array('label'=>'trans.my_desc')) 
    ->add('list',ChoiceType::class,array(
    'label'=>'trans.my_list', 
    'multiple'=>false, 
    'choices'=>$list, 
    'placeholder'=>'trans.do_a_choice', 
    //'placeholder_in_choices'=>false //this option is not available 
) 
->add('submit',SubmitType::class,array('label'=>'trans.validate')); 

    } 

、私はそこにブーリアンオプションplaceholder_in_choices(http://symfony.com/doc/current/reference/forms/types/choice.html#field-variables)ですが、このオプションはできないことを見ます" - > add( 'list'、ChoiceType :: class、array([リストのオプションの配列])"の下にある[list for options]の配列に設定します( 'placeholder_in_choices'は利用可能なオプション)

私の検索で私はこの既存の質問を私の近くに見つけました:Symfony how to disable the default option

それを通して読んだ後、私はMyEntityTypeクラスにfinishView()関数を実装しようとしました:

public function finishView(FormView $view, FormInterface $form, array $options){ 

    var_dump($view->children['list']->vars); 

    foreach ($view->children['list']->vars['choices'] as $sma) { 
     if ($sma->value == "") { 
      $sma->attr['disabled'] = 'disabled'; 
     } 
    } 
} 

問題は、それがのvar_dumpに示されるように、ということである()、$ [表示] - > children ['list'] - > vars ['choices']に 'プレースホルダ'の値またはラベル(trans.do_a_choice)が含まれていないため、 'disabled'属性を付けることはできません。

「trans.do_a_choice」を選択メニューのプレースホルダとして表示する方法はありますが、オプションリストには表示されない(または選択できない)という手掛かりはありますか?

+0

ちょうどあなたがフィールド上trueに必要な設定を確実?次に、プレースホルダを設定してフォームを設定すると、値が設定されていないためエラーが発生します。 – LMS94

+0

わかりません。プレースホルダを表示したい場合は、ユーザーがドロップダウンをクリックするとすぐに消えますか?そのような場合は、フロントエンド(JS)のタスクのように聞こえます。 –

+0

@ LMS94