簡単な問題があります。
たとえば、フィールドのあるフォームがあります:
$builder
->add('x')
->add('y')
->add('z')
;
私のtwigファイルでは、複数のブロックを使用しており、フィールドのレンダリングを停止したいのですが... b.html.twigファイルを表示します!
a.html.twig
{% block body %}
{% block form %}
{{ form_widget(form) }}
{% endblock form %}
{% endblock body %}
b.html.twig
{% block form %}
{{ form.x.set('rendered', true) | default() }}
{{ parent() }}
{% endblock form %}
「default()」を削除すると、エラーが発生し、オブジェクトを文字列に変換できません。そして実際には、フォームはすべてのフィールドをレンダリングします... xフィールドを含みます。しかし、それらはxフィールドをレンダリングすべきではありません...
よろしくお願いします!
ここに質問がありませんか?単純な呼び出しではないのに、フィールドをレンダリング済みに設定したい場合は、次のようにします。
{% do form.x.setRendered %}
誤解した場合は、お詫び申し上げます。
次の終了フォームステートメントを使用して、フォームで定義されているがテンプレートには記述されていないフォームフィールドがレンダリングされないようにすることができます。
_{{ form_end(form, {'render_rest': false}) }}
_
たとえば、次のフォームを定義します。
_public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'id',
HiddenType::class,
array(
'required' => false
)
)
->add(
'name',
TextType::class,
array(
'required' => false
)
)
->add(
'comment',
TextType::class,
array(
'required' => false
)
)
->add(
'amount',
TextType::class,
array(
'required' => false
)
);
}
_
このフォームでは次のテンプレートについて説明しますが、フィールドid
をレンダリングしたくないので、_render_rest
_ブロックでオプション_form_end
_を使用して、フィールドid
のレンダリングを省略できます。
_{# render opening form tag #}
{{ form_start(form) }}
{# render field with label #}
{{ form_row(form.name) }}
{# render only field #}
{{ form_widget(form.comment) }}
{# render only label #}
{{ form_label(form.amount) }}
{# render only field #}
{{ form_widget(form.amount) }}
{# if csrf token is enabled for form render field #}
{% if form._token is defined %}
{{ form_widget(form._token) }}
{% endif %}
{# render closing form tag and do not render rest form elements #}
{{ form_end(form, {'render_rest': false}) }}
_
なんらかの決定ロジックを含めることにより、FormTypeのフォームフィールドを削除(または追加のみ)する必要があります。
たとえば、cerain変数の存在/値をチェックします。
次に、この変数をコンストラクターに注入できます。
テンプレートから削除するのは、テンプレートに属さないアプリケーションロジックです。
他に選択肢がない場合は、 FormView :: setRendered() メソッドを確認してください。
Twigs attribute function を使用して、オブジェクトのメソッドにアクセスできます。
{{ attribute(object, method, arguments) }}