从外部文件中包含twig loader

时间:2015-09-10 20:17:33

标签: php twig

我目前将其包含在每个控制器文件的顶部:

$loader = new Twig_Loader_Filesystem('/templatedir/templates');

$twig = new Twig_Environment($loader, array('debug' => true));
$twig->addExtension(new Twig_Extension_Debug());

我发现将它放在每个文件中都有点多余。将此代码放在外部文件中并使用require_once命令包含它会有任何问题吗?

每个控制器文件中的render语句将使用外部文件中包含的$ twig变量。我从另一个文件访问变量时有点不舒服,但我想知道我的担忧是否合理。

1 个答案:

答案 0 :(得分:1)

使用require_once对于简单的应用程序来说没问题。您的担忧当然是正确的,如果变量$twig也设置在其他地方,在另一个包含和另一个上下文中会怎么样?您将遇到难以调试的冲突。

有几种方法可以避免这个问题。如果您熟悉面向对象编程,则可以定义如下类:

文件Twigloader.php

class Twigloader {
  public static $twig;

  public static function init() {
    $loader = new Twig_Loader_Filesystem('/templatedir/templates');

    self::$twig = new Twig_Environment($loader, array('debug' => true));
    self::$twig->addExtension(new Twig_Extension_Debug());
  }
}

Twigloader::init();

现在你需要在每个文件中使用树枝,你可以做到以下几点而不存在碰撞风险:

require_once "Twigloader.php";
$template = Twigloader::$twig->loadTemplate('test.html');

如果您不喜欢require_once,因为在复杂的应用程序中,很难跟踪您应该查看自动加载的不同依赖项: http://php.net/manual/de/language.oop5.autoload.php