Smarty错误:在非对象上调用成员函数get_articlelist_primary()

时间:2014-10-17 18:53:55

标签: php smarty smarty3

我被迫使用Smarty进行项目,但服务器运行缓慢,所以我尝试在MAMP本地使用它。

对于Smarty来说,我是一个完全的初学者。

首先,我在index.php中为我正在制作的网站下载了smarty,我上了课:

class Panel{
    public function __construct__(){}
    public function get_articlelist_primary(){return array();}
}

然后我做了一个实例:

$panelObj=new Panel();

我和Smarty做了什么:

require_once("../Smarty-3.1.20/libs/Smarty.class.php");
$smarty = new Smarty();
$smarty->template_dir = 'views';
$smarty->compile_dir = 'tmp';
$smarty->assign("panelObj",$panelObj);
$smarty->display("index.tpl");

然后我制作了一个模板,然后它才开始工作。 PHP错误日志说:

[17-Oct-2014 20:48:38 Europe/Berlin] PHP Fatal error:  Call to a member function get_articlelist_primary() on a non-object in /Applications/MAMP/htdocs/LanderTemplate/tmp/3dd4ab168909a8c2acf37974fa4b15c661cc2857.file.index.tpl.php on line 377

编译模板中的第377行是:

if (count($_smarty_tpl->tpl_vars['panelObj']->value->get_articlelist_primary())) {?></div><?php }?>

在已编译的模板中写入此行以将其记录错误:

<?php error_log(print_r($_smarty_tpl->tpl_vars['panelObj'],1));

它返回了:

[17-Oct-2014 20:48:38 Europe/Berlin] Smarty_Variable Object
(
    [value] => 
    [nocache] => 
    [scope] => 0
    [_loop] => 
)

似乎&#34;价值&#34;应该等于我分配它的实例,但它只是空白。这可能是什么原因?我正在使用Smarty 3.1.20。

1 个答案:

答案 0 :(得分:0)

你应该确保你做的一切都很好,所以请尝试使用此代码以确保在当前范围内定义了$panelObj

class Panel{
    public function __construct(){}
    public function get_articlelist_primary(){return array();}
}
$panelObj=new Panel();

var_dump($panelObj);
$smarty->assign("panelObj",$panelObj);
$smarty->display("index.tpl");

index.tpl档案中:

{$panelObj->get_articlelist_primary()}

如果启用了error_reporting,您将只看到通知:

object(Panel)#17 (0) { }
Notice: Array to string conversion in ...\templates_c\6a7a7402e26bab6fe66fe3d214cc5fb929376cc9.file.sb.tpl.php on line 34
Array 

因为你在这个函数中返回数组,但正如你所看到的,这个类方法可以毫无问题地启动。我已在3.1.19

中对其进行了测试