Smarty:是否可以在模板中调用PHP函数(来自控制器类)?

时间:2014-08-28 14:31:04

标签: php function smarty

我在控制器类中创建了一个需要在模板中使用的函数(因为它渲染了很多次模板(每个模板都是网站上的一个帖子,它们都会在新闻源中显示不同的值)有没有办法在一个聪明的变量上调用它? 假设您在控制器中创建了一个函数:

public function foo($bar){
       $bar++;
       return $bar;
}

然后在模板中:

{$smarbar|foo}或类似的东西

3 个答案:

答案 0 :(得分:6)

您可以注册一个将调用类的给定方法的修饰符:

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}

这是registerPlugin文档。

答案 1 :(得分:1)

是的,只需在模板上管道功能

{$ MYVAR |创建my_function)

答案 2 :(得分:1)

一切都取决于您的需求,但如果您只是想使用这样的代码,您可以将对象分配给Smarty并使用其方法。

例如在PHP中你可以这样做:

class Controller
{
    public function foo($bar)
    {
        $bar++;
        return $bar;
    }
}

$smarty->assign('a', new Controller);

在Smarty中你可以做到:

{$a->foo(5)} {$a->foo(15)}

你会得到:

  

6 16

作为输出。