我目前将其包含在每个控制器文件的顶部:
$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变量。我从另一个文件访问变量时有点不舒服,但我想知道我的担忧是否合理。
答案 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