包括来自外部文件的树枝加载器

Include twig loader from external file

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

$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 变量。我对从另一个文件访问变量有点不舒服,但想知道我的担忧是否合理。

使用require_once 适合简单的应用程序。您的担忧当然是正确的,如果变量 $twig 也设置在其他地方,在另一个包含和另一个上下文中怎么办?您将遇到难以调试的碰撞。

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

文件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