考虑以下PHP模板:
<?= var_dump($myVariable) ?>
这是用以下控制器代码呈现的:
public function myAction() {
return $this->render("MyBundle::test.html.php");
}
显然,我们的变量$myVariable
没有在模板中设置。当在dev
环境中查看此页面时,我们得到一个异常,告诉我们该变量未定义。在prod
环境中查看页面时,我们得到输出null
。
我已经调试了这个相当多,但没有发现Symfony决定哪些变量需要用null
初始化的地方。在幕后发生的事情是,Symfony在视图变量数组上调用export
(在我们的例子中是空的),然后在视图模板本身上调用require
。有趣的是,在调试视图时,变量从未在dev
和prod
中定义过。但是在这两种环境下仍然有不同的输出。
我的问题是:
- Symfony如何做到这一点?
- 这是预期的行为吗?
- 这是记录在某处,我只是错过了它?
- 是否有一种方法可以改变这种行为,以便它也会在
prod
中失败并将错误写入日志文件?
我才刚刚开始使用PHP和Symfony,但在我看来,它是这样的:
- Symfony将调用模板上的
require
- 你的模板开始执行 PHP试图计算
$myVariable
PHP将触发E_NOTICE
级错误,如PHP手册所述这就是不同环境发挥作用的地方。在debug.xml中的debug.error_handler.throw_at
键下定义的错误级别是-1 (ALL) for dev和0 (NONE) for prod.所以对于dev, Symfony中的ErrorHandler
将抛出,对于生产,它不会。