Php 当模板无法编译时,如何使smarty输出调试信息?

Php 当模板无法编译时,如何使smarty输出调试信息?,php,smarty,Php,Smarty,我已经将其调试选项设置为真,但当smarty模板中出现错误时(即,没有针对特定smarty\u修饰符的相应插件),将不会输出任何信息 更新 对于任何想尝试的人,这是我能想到的最简单的模板: {$var|nosuch_modifier} 1-首先,您可以检查错误报告是否处于启用状态。这通常在php.ini中完成,但您可以将这些语句放在php源代码的顶部 ini_set('display_errors', 1); ini_set('error_reporting', E_ALL); 并确保它没

我已经将其
调试
选项设置为
,但当smarty模板中出现错误时(即,没有针对特定
smarty\u修饰符的相应插件
),将不会输出任何信息

更新

对于任何想尝试的人,这是我能想到的最简单的模板:

{$var|nosuch_modifier} 

1-首先,您可以检查错误报告是否处于启用状态。这通常在php.ini中完成,但您可以将这些语句放在php源代码的顶部

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
并确保它没有在其他地方被禁用

2-smarty可能会将错误报告为引发异常。您可以定义一个全局异常处理程序来捕获它们,下面是一个示例

try {
    // place your code here
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
根据评论更新:

我能想到的唯一原因是您将
compile\u check
设置为false

$tpl->compile_check = false;
在本例中,Smarty将显示最新编译的源代码,无论您对tpl文件做了什么。那么,您是否检查并将
compile\u check
设置为true

$tpl->compile_check = true;
试一试


在PHP代码中。

可以手动设置Smarty错误报告

$smarty->error_reporting = E_ALL ^ E_NOTICE;
Smarty.class.php中的一些注释

由于某些人实现了自定义,所以执行了错误静音 错误\u处理程序对某些应用程序使用和 原因不理解以下段落:

重要的是要记住,标准PHP错误处理程序是 对于错误类型指定的错误类型,完全绕过 除非回调函数返回FALSE。错误报告()设置 将不起作用,并且将调用错误处理程序- 但是,您仍然能够读取的当前值 错误报告并采取适当行动。特别值得注意的是 如果导致错误的语句已加前缀,则值将为0 由@error control操作符执行

Smarty故意在文件_exists()上使用@filemtime(),并且 在某些地方使用filemtime()。原因包括 -@filemtime()的速度几乎是使用其他文件的两倍 -在file_exists()和filemtime()之间打开了一个可能的争用条件,使用简单的@filemtime()方法不存在该争用条件


啊,3分钟规则。同时回答相同。你试过了吗?你能试着执行最简化的模板
{$var | nosuch_modifier}
?它对我有效,你必须逐个检查你的PHP错误报告和错误级别、模板编译检查、模板缓存检查等。如果所有这些都正常,没有理由不显示任何内容。我只是尝试了一下,但没有例外。我已经将PHP配置为输出错误。
$smarty->error_reporting = E_ALL ^ E_NOTICE;