2016-05-02 4 views
2

私は新しいプロジェクトを作成しています。私のメインページデザインでは、ユーザーがゲストの場合は2列、ユーザーがログされている場合は3列を表示する必要があります。symfonyにtwig埋め込みでログインした場合のデザインが異なります

私はTwig上でembed関数を使用しようとしていますが、埋め込みTwig関数を使用しないでHTMLコードを複製することしかできません。

これは私のテンプレートです:

index.html.twig

{% extends 'base.html.twig' %} 
    {% block body %} 
     {% embed "home_columns" %} 
      {% if is_granted("IS_AUTHENTICATED_FULLY") %} 
        3 columns 
      {% else %} 
        2 columns 
      {% endif %} 
     {% endembed %} 
{% endblock %} 

home_columns.html.twig

{% block main_left_col %} 
    <aside id="left_column" class="col-md-2">&nbsp;</aside> 
{% endblock %} 

{% block main_middle %} 
    <section id="last-plans" class="col-md-8"></section> 
{% endblock %} 

{% block main_right_col %} 
    <aside id="right_column" class="col-md-2">&nbsp;</aside> 
{% endblock %} 

しかし、それは今働いている...

埋め込み twig機能は私がしたいことをする最も良い方法ですか?

+1

埋め込み機能は正しい方法だと思います。このリンクは 'embed'、' include'と 'macro'の違いについて説明しています:https://github.com/twigphp/Twig/issues/1697 –

答えて

0

[OK]を、本当の問題は、このコードの一部です:

このエラーを返します
{% if is_granted("IS_AUTHENTICATED_FULLY") %} 
     3 columns 
    {% else %} 
     2 columns 
     {% block main_right_col %}{% endblock %} 
    {% endif %} 

An exception has been thrown during the compilation of a template   
    ("Node "1" does not exist for Node "Twig_Node".") in   
    "HomeBundle:Default:index.html.twig". 

ユーザーがからログインしている場合、私は確認することができないということのようです埋め込み小枝テンプレート。ビューで

{% extends 'base.html.twig' %} 

    {% block body %} 

     {% embed "HomeBundle:Default:home_columns.html.twig" with { 'userIsLogged': is_granted("IS_AUTHENTICATED_FULLY") } %} 

     {% endembed %} 

    {% endblock %} 

そして埋め込まビューで:

{% if userIsLogged == true %} 

     3 columns 

    {% else %} 

     2 columns 

    {% endif %} 

よろしく!

+1

正解ですか? – felipsmartins

+0

はい、その正しい答えです。 – viher

+1

あなたは 'with {'userIsLogged':is_granted(" IS_AUTHENTICATED_FULLY ")}'を使ってみましたか? 'userIsLogged'の値は必要ないようです。 –