2017-06-24 7 views
0

2つのテンプレートがあり、メインテンプレートから変数body_classを上書きしたいとします。これはこれまでのコードです。Twig:前のテンプレートで設定された変数のオーバーライド

メインテンプレート:

{# main.html.twig #} 
<!DOCTYPE html> 
<html> 
    <head> 
    {% block head %} 
     {% block head_meta %} 
      // ... 
     {% endblock %} 
     <title>{% block title %}Welcome!{% endblock %}</title> 
     {% block stylesheets %} 
      // ... 
     {% endblock %} 
     {% block icon %} 
      <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" /> 
     {% endblock %} 
    {% endblock %} 
    </head> 
    {% set body_class = '' %} 
    <body class="main {{ body_class }}"> 
     {% block navi %}{% endblock %} 
     {% block error %}{% endblock %} 
     {% block body %}{% endblock %} 
     {% block footer %}{% endblock %} 
     {% block javascripts %} 
      // ... 
     {% endblock %} 
    </body> 
</html> 

2番目のテンプレート:

{# dashboard.html.twig #} 

{% set body_class = 'dashboard' %} 
{% extends 'main.html.twig' %} 

{% block head %} 
    {{ parent() }} 
{% endblock %} 
{% block head_meta %} 
    {{ parent() }} 
{% endblock %} 
{% block title %}Dashboard!{% endblock %} 
{% block body %} 
    I'm dashboard! 
{% endblock %} 

私は前の文を拡張した後{% set body_class = 'dashboard' %}置いてみましたが、それは動作しませんでした。私は間違って何をしていますか?

ありがとうございます。

答えて

2

main.html.twigファイルにbody_classを設定しないでください。

{% set body_class = '' %}行を削除し、<body class="main {{ body_class|default('') }}"><body class="main {{ body_class }}">を変更:dashboard.html.twigはちょうどmain.html.twigを変更、すべての良いです。

あなたdashboard.html.twigファイルからそれを設定するときに、あなたのbody_class変数それが定義されていないdefault値として'''dashboard'を持ってその方法。

基本ファイルに変数を設定した場合(この場合はmain.html.twig)、継承テンプレートから変数を上書きすることはできません。

関連する問題