模板无法编译时如何制作智能输出调试信息?

时间:2010-11-03 07:24:13

标签: php smarty

我已经将debugging选项设置为true,但是当smarty模板中出现错误时(即没有针对特定smarty_modifier的相应插件),没有输出任何内容信息。

更新

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

{$var|nosuch_modifier} 

3 个答案:

答案 0 :(得分:1)

1-首先,您可以检查error_reporting是否已打开。这通常在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";
}

答案 1 :(得分:0)

评论更新:

我能想到的唯一原因是你将compile_check设置为false。

$tpl->compile_check = false;

在这种情况下,Smarty将显示最新的编译源代码,无论您对tpl文件执行什么操作。那么,您是否检查并将compile_check设置为true?

$tpl->compile_check = true;

<击>尝试

<击>
ini_set('display_errors', true);
error_reporting(E_ALL);
在PHP代码中

答案 2 :(得分:0)

可以手动设置Smarty错误报告。

$smarty->error_reporting = E_ALL ^ E_NOTICE;

Smarty.class.php的一些评论

  

错误静音已完成,因为有些人实现了自定义   error_handlers使用http://php.net/set_error_handler和一些   理由不明白以下段落:

     

重要的是要记住标准的PHP错误处理程序是   完全绕过error_types指定的错误类型   除非回调函数返回FALSE。 error_reporting()设置   将无效,您的错误处理程序将被调用 -   但是你仍然可以读取当前的值   error_reporting并采取适当的行动。特别值得注意的是这一点   如果导致错误的语句被预先添加,则值将为0   由@ error-control运算符。

     

Smarty故意在file_exists()上使用@filemtime()   filemtime()在某些地方。原因包括    - @filemtime()几乎是使用额外file_exists()的两倍    - 在file_exists()和filemtime()之间打开一个可能的竞争条件,使用简单的@filemtime()方法不存在。