2017-03-18 10 views
0

私のフィールドの束を囲む特別なdivを設定したいと思います。そのために、form_themeで検出できるフォームビルダに何かを追加し、そこにdivを設定します。symfony - フォームビルダからフォームのテーマにカスタムデータを渡します

私はカスタムATTRを設定し、フォームビルダに

->add('field', new myCustomType(), array('inherit_data' => true, "label" => false, "required" => false, 'attr' => array("test" => "aaa"))) 

を追加しようとしました、それが実際に属性としてHTMLにレンダリング...しかし、私は、フォームのテーマでそれを検出することができませんよいます。

{{ block('widget_container_attributes') }} 

のみウィジェット属性を与え、

{{ block('row_container_attributes') }} 

は動作しません。実際にフォームテーマのblocksでどの変数が利用できるかをオンラインで調べるのは難しいです(どのようにブロックを呼び出すのかは分かりません)。先に任意のヘルプ

私は公式サイト上でいくつかのより多くの情報を探した

hereほとんどなく、任意の成功なしで...

ありがとう!

答えて

1

フォームビルダに入れておくと、テンプレートに永久に設定される可能性があります。データを設定するために必要なロジックがある場合は、コントローラにそのデータが含まれているので、そこに配置してください。

コントローラー:

あなたの小枝テンプレートに続いて
public function someAction() 
{ 

    // .... 

    return $this->render('some_twig_template.twig.html', array(
     'attr' => array("test" => "aaa") 
    ); 
} 

{{ dump(attr) }} 
{{ dump(attr.test) }} 

EDIT:

: は、テンプレート内のすべての時間をレンダリングするには、直接レンダリングされたフィールド上のクラスを設定することができます
{{ form_label(form.field, 'My label', { 'label_attr': {'class': 'js-hidden-row'} }) }} 
{{ form_widget(form.field, { 'attr': {'class': 'js-hidden-row'} }) }} 

私のjavascriptでは、いくつかの簡単なjQueryで非表示にすることができます:

<script> 
    jQuery(document).ready(function() { 
     $('.js-hidden-row').hide(); 
    }); 
</script> 
+0

お寄せいただきありがとうございます!実際にそれは本当に論理ではなく、それはもっとディスプレイのものです。いくつかのdivをデフォルトで非表示にして、それを表示するためのクリック可能なボタンがあるようにしたいと思います。フォームビルダの属性をその特定のフィールドに設定したいので、フォームテーマでその属性を検出できたら'hide'クラスでdivを設定し、ボタンを追加してください...私はテンプレート自体の中でフォームフィールドを定義し、' {{form(form)}} '私はこのようなものを設定する簡単な方法がないことに驚いています... –

+1

意味があります。私はまだこれをフォームビルダーに入れないと主張します。毎回そのフィールドをレンダリングしたいので、テンプレートに入力してください。私は自分の答えを変更して、私がどのようにそれを行うかを示します。 – ehymel

+0

ありがとう、それは私が行くようになった方法でした! –

関連する問題