2016-08-15 5 views
2

小枝で私は{% include %}をたくさん使用しています。私はファイルが見つからないときに例外に遭遇したくないので、すべてのインクルードにignore missingを付ける必要があります。これはテンプレートコードを大いに盛り上げ、すべてのインクルードコールでそれを繰り返さずに、すべてのインクルードにデフォルトでignore defaultを添付するオプションを探しています。 Twigの独自のインクルードはPHPのように動作するので、私はphp's includeと同等のものを探しています。小枝:デフォルトでインクルードに「無視する」を使用してください

ファイルが見つからずに、すべてのインクルードファイルにignore missingを追加せずに例外がスローされることなく、Twigにテンプレートを含めるにはどうすればよいですか?
私は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()); 
関連する問題