Smarty:可以在模板内调用PHP函数(从controller类)吗?
我在controller类中创建了一个需要在模板中使用的函数(因为它多次呈现了模板(每个模板都是网站上的一篇文章,它们都将在新闻提要中以不同的值显示)。是否有方法在smarty变量中调用它? 假设您在控制器中创建了一个函数:Smarty:可以在模板内调用PHP函数(从controller类)吗?,php,function,smarty,Php,Function,Smarty,我在controller类中创建了一个需要在模板中使用的函数(因为它多次呈现了模板(每个模板都是网站上的一篇文章,它们都将在新闻提要中以不同的值显示)。是否有方法在smarty变量中调用它? 假设您在控制器中创建了一个函数: public function foo($bar){ $bar++; return $bar; } 然后在模板中: {$someVar|myModifier} {$smarbar | foo}或类似的东西是的,只需在模板上通过管道传递函数即可
public function foo($bar){
$bar++;
return $bar;
}
然后在模板中:
{$someVar|myModifier}
{$smarbar | foo}
或类似的东西是的,只需在模板上通过管道传递函数即可
{$myvar | my_函数)您可以注册一个修饰符,该修饰符将调用类的给定方法:
class SomeClass {
public function someMethod($value)
{
// return modified value
}
}
$smarty = new Smarty();
$smarty->registerPlugin('modifier', 'myModifier', array('SomeClass', 'someMethod'));
// or
$instance = new SomeClass();
$smarty->registerPlugin('modifier', 'myModifier', array($instance, 'someMethod'));
现在,您可以在模板中使用以下内容:
{$someVar|myModifier}
这是文档。一切都取决于您的需要,但如果您只是想使用这样的代码,您可以将对象分配给Smarty并使用其方法 例如,在PHP中,您可以执行以下操作:
class Controller
{
public function foo($bar)
{
$bar++;
return $bar;
}
}
$smarty->assign('a', new Controller);
{$a->foo(5)} {$a->foo(15)}
在Smarty中,您可以执行以下操作:
class Controller
{
public function foo($bar)
{
$bar++;
return $bar;
}
}
$smarty->assign('a', new Controller);
{$a->foo(5)} {$a->foo(15)}
您将获得:
616
作为输出。您的意思是,是否可以使函数保持静态,以便每次调用时bar都会增加?不,不,我只是想知道是否可以在smarty模板文件中调用PHP函数。该函数只是一个示例。本文的其余部分解释了为什么要这样做。只是一个警告,在静态上下文中调用方法今天早些时候发布的5.6版本不推荐使用非声明静态。如果我想提交一个smarty数组值作为参数,比如
{$a->foo({$array.key})}
,有可能吗?这实际上是可行的。那些投反对票的人请解释它不好的一面