开发者

How to make smarty output debug info when template fails to compile?

I'm already set its debugging option to true,but when there's error 开发者_JAVA技巧in smarty template(i.e. there is no corresponding plugin for a specific smarty_modifier),nothing is output for information.

UPDATE

For anyone that wants to have a try,this is the most simple template I can think of :

{$var|nosuch_modifier} 


1- First, you can check if error_reporting is on. this is usually done in php.ini but you can place these statements on top of your php source.

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

and make sure it is not disabled elsewhere.

2- smarty may report errors as throwing an exception. You can define a global exception handler to catch them, here is an example;

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


Update upon comments:

The only reason I can think of is that you've set compile_check to false.

$tpl->compile_check = false;

In this case, Smarty will show the latest compiled source, whatever you do to the tpl file. So, did you check and set compile_check to true?

$tpl->compile_check = true;

Try

ini_set('display_errors', true);
error_reporting(E_ALL);

in the PHP code.


Smarty error reporting can be set manually.

$smarty->error_reporting = E_ALL ^ E_NOTICE;

Some comments from the Smarty.class.php

error muting is done because some people implemented custom error_handlers using http://php.net/set_error_handler and for some reason did not understand the following paragraph:

It is important to remember that the standard PHP error handler is completely bypassed for the error types specified by error_types unless the callback function returns FALSE. error_reporting() settings will have no effect and your error handler will be called regardless - however you are still able to read the current value of error_reporting and act appropriately. Of particular note is that this value will be 0 if the statement that caused the error was prepended by the @ error-control operator.

Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include - @filemtime() is almost twice as fast as using an additional file_exists() - between file_exists() and filemtime() a possible race condition is opened, which does not exist using the simple @filemtime() approach.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜