Smarty内部错误

时间:2013-04-05 14:46:29

标签: php smarty

查看服务器PHP错误日志显示某种类型的PHP通知是最常见的,它与Smarty有关。我发现a question似乎描述了同样的错误,但实际上没有答案。

通知如下(有不同的变量表示为未定义):

PHP Notice:  Undefined variable: is_admin in /usr/share/php/Smarty/sysplugins/smarty_internal_data.php on line 291

我想知道如何调试这个,因为没有提供数据(如模板名称)。

下面我将给你一些代码的想法(你可以详细阅读here,因为它是全部开源的。)

因此,有一个全局智能对象在名为header.php的文件中创建,并且在同一文件中还设置了一些全局智能变量,包括上面通知中的变量:

//init Smarty
require_once('Smarty.class.php');

$smarty = new Smarty();
...
$smarty->assign('is_admin', is_admin() ? 1 : 0);

然后,通过调用header.php,每个需要显示一些HTML的文件中都会包含此$smarty->display(...)。所以我假设在$smarty对象存在的任何文件中,该对象都有一个名为is_admin的变量。但是,似乎并非如此。

此外,关于未设置变量的“正常”Smarty警告看起来不同:

PHP Notice:  Undefined index: sent_id in /var/www/smarty_dir/templates_c/a5aab2c66c44442365a39981ba9be18e0a1f11ad.file.history.tpl.cache.php on line 123

有什么想法吗?

UPD。 我已经阅读了一些日志,我发现当用户进入页面并获得302 HTTP状态时,似乎会出现这样的警告。这可能是由于以下代码(在智能构造函数调用之后但在赋值变量之前放置的代码:

//cookie check
if (!is_logged() && isset($_COOKIE['auth'])) {
    if ($user_id = check_auth_cookie()) {
        if (user_login('', '', $user_id, $_COOKIE['auth'])) {
            header("Location:".$_SERVER['REQUEST_URI']);
            return;
        }
    }
}

所以我想我应该在此块之后移动$smarty初始化,这可能会有所帮助。我仍然很好奇它与这个问题的关系。

2 个答案:

答案 0 :(得分:0)

我想我明白了。问题实际上在包括

在内的代码中
header("Location:".$_SERVER['REQUEST_URI']);
return;

我的错误是return在这种情况下不像exit那样,因为当您从return d或{{1}的文件中调用require时进入另一个,你只需将控件返回到另一个文件。我不知道这个功能。

答案 1 :(得分:-2)

'is_admin', is_admin()你试图将函数is_admin()作为变量{$ is_admin}分配给Smarty模板,根据我的说法,这是不可能的。

将返回结果分配给变量,即:

$var = is_admin();
$smarty->assign('is_admin', $var);