2016-08-15 70 views
2

使用樹枝我正在使用{% include %}很多。我需要將ignore missing附加到每個包含,因爲我不想在找不到文件時遇到Exception。這大大擴展了模板代碼,我正在尋找一個選項來將ignore default默認添加到所有包含中,而不用每次包含調用都重複。我在Twig中尋找相當於php's include,因爲Twig自己的包含行爲像php的要求。樹枝:默認使用「忽略缺失」包括

如何在不存在未找到文件且未將ignore missing添加到每個包含的情況下引發異常時在Twig中包含模板?
我正在尋找一個配置在樹枝中,但沒有找到一個選項。

+0

似乎不好的做法,我雖然要做到這一點,你就需要修改樹枝ENV或樹枝模板你自己的。爲什麼你需要每次檢查? – DarkBee

回答

0

由壓倒一切的內置包括

 class TokenParser_Include extends Twig_TokenParser 
     { 
      public function parse(Twig_Token $token) 
      { 
       $expr = $this->parser->getExpressionParser()->parseExpression(); 

       list($variables, $only, $ignoreMissing) = $this->parseArguments(); 

       return new Twig_Node_Include($expr, $variables, $only, $ignoreMissing = true, $token->getLine(), $this->getTag()); 
      } 

      protected function parseArguments() 
      { 
       $stream = $this->parser->getStream(); 

       $ignoreMissing = false; 
       if ($stream->nextIf(Twig_Token::NAME_TYPE, 'ignore')) { 
        $stream->expect(Twig_Token::NAME_TYPE, 'missing'); 

        $ignoreMissing = true; 
       } 

       $variables = null; 
       if ($stream->nextIf(Twig_Token::NAME_TYPE, 'with')) { 
        $variables = $this->parser->getExpressionParser()->parseExpression(); 
       } 

       $only = false; 
       if ($stream->nextIf(Twig_Token::NAME_TYPE, 'only')) { 
        $only = true; 
       } 

       $stream->expect(Twig_Token::BLOCK_END_TYPE); 

       return array($variables, $only, $ignoreMissing); 
      } 

      public function getTag() 
      { 
       return 'include'; 
      } 
     } 

    $twig->addTokenParser(new TokenParser_Include());