【问题标题】:Include twig loader from external file包括来自外部文件的树枝加载器
【发布时间】:2015-09-13 05:43:15
【问题描述】:

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

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

【问题讨论】:

  • 关注此rottmann.net/2013/01/… 可能对您有所帮助。而且我不知道您为什么要编写相同的代码。使用容器来放置您的树枝实例并从您的控制器中调用它。

标签: php twig


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多