2016-09-23 5 views
2

私はインターネットでこれを探していますが、これについては何も見つかりません。Symfony/Twig:テンプレートの残りの部分のレンダリングをやめてください。

私は、複数の場所で使用される単純な小枝テンプレートを作成していますが、いくつかの変数が必要です。

私はこのような何かをできるようにしたい:

{% if some_variable is not defined %} 
    <h1>Some variable was not defined.<h1> 
    -- stop rendering the rest of the template -- 
{% endif %} 

{{ some_variable }} is defined here. 

私はこれを求めている理由は本当に簡単です。 テンプレート全体を1つ以上のif文でインデントしたくないのは、ファイル全体を非常に簡単に混乱させるからです。

私は回避策が複数のテンプレートを作成することであることを知っていますが、単純な条件のための複数のファイルは私に過剰な残虐な音を鳴らします。

これがネイティブに存在しない場合は、どのように誰に教えてもらえれば、これを拡張することができます。

ありがとうございます!

P.S. {% else %}で答えないでください。私がここで避けようとしているものです。

+0

あなたが作成することができるだけでなくコンパイルレンダリングするよう

TL:DRそのようなことを達成するための唯一の方法は、おそらくあなた自身のノードを書くことができ、PHPtwigテンプレートをコンパイルtwigのコンパイラをオーバーライドすることですあなた自身の拡張子とimplのphp 'die'関数 – Matteo

+0

これはアプリケーション全体の実行を止めるでしょう。申し訳ありませんが、それは絶対に私が望むものではありません) – Harold

答えて

2

あなたが求めているのはネイティブにサポートされていません。
このようなことを達成するには、多くの問題を解決する必要があります。

TwigテンプレートはPHPにコンパイルされ、Twigの基本テンプレートで拡張されています。基本テンプレートを見ると、最終的には関数doDisplayが呼び出されます。

protected function doDisplay(array $context, array $blocks = array()) 
    { 
     // line 1 
     echo "\t<div id=\"null_wrapper\"> 
\t\t<div class=\"invoice_price\">\t\t\t 
\t\t\t<div> 
\t\t\t\t"; 
     // line 4 
     echo twig_escape_filter($this->env, $this->getAttribute((isset($context["forms"]) ? $context["forms"] : $this->getContext($context, "forms")), "getTextfield", array(0 => "#label_Quantity#", 1 => "txt_new_quantity", 2 => ((array_key_exists("txt_quantity", $context)) ? (_twig_default_filter((isset($context["txt_quantity"]) ? $context["txt_quantity"] : $this->getContext($context, "txt_quantity")), 1)) : (1)), 3 => ((array_key_exists("errors", $context)) ? (_twig_default_filter((isset($context["errors"]) ? $context["errors"] : $this->getContext($context, "errors")), "")) : ("")), 4 => "", 5 => "smallinput"), "method"), "html", null, true); 
     echo " 
\t\t\t</div> 
\t\t\t<div class=\"clear\"></div> 
\t\t\t<div> 
\t\t\t\t"; 
     // line 8 
     echo twig_escape_filter($this->env, $this->getAttribute((isset($context["forms"]) ? $context["forms"] : $this->getContext($context, "forms")), "getTextfield", array(0 => "#label_Unit_price#", 1 => "txt_new_price_excl", 2 => ((array_key_exists("txt_new_price_excl", $context)) ? (_twig_default_filter((isset($context["txt_new_price_excl"]) ? $context["txt_new_price_excl"] : $this->getContext($context, "txt_new_price_excl")), "")) : ("")), 3 => ((array_key_exists("errors", $context)) ? (_twig_default_filter((isset($context["errors"]) ? $context["errors"] : $this->getContext($context, "errors")), "")) : ("")), 4 => "", 5 => "smallinput"), "method"), "html", null, true); 
     echo "<span>"; 
     echo twig_escape_filter($this->env, getSiteConfigValue("CURRENCY"), "html", null, true); 
     echo "</span> 
\t\t\t</div> 
\t\t\t<div class=\"clear\"></div> 
\t\t\t<div> 
\t\t\t\t"; 

を次のように出力を見ることができるように、この機能の内容の一例がある、すぐにブラウザに送信された(ベーステンプレートにob_startによりcatched)、そうであっても、あなたは、テンプレートの外に出ることができていますあなたは壊れたHTMLで終わることがあります。これは/が

+0

すばやい返信をいただきありがとうございます、DarkBee.Guess回避策を解決します。これは残念なことにもっと多くのトラブルのようです。 – Harold

関連する問題