Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smarty:可以在模板内调用PHP函数(从controller类)吗?_Php_Function_Smarty - Fatal编程技术网

Smarty:可以在模板内调用PHP函数(从controller类)吗?

Smarty:可以在模板内调用PHP函数(从controller类)吗?,php,function,smarty,Php,Function,Smarty,我在controller类中创建了一个需要在模板中使用的函数(因为它多次呈现了模板(每个模板都是网站上的一篇文章,它们都将在新闻提要中以不同的值显示)。是否有方法在smarty变量中调用它? 假设您在控制器中创建了一个函数: public function foo($bar){ $bar++; return $bar; } 然后在模板中: {$someVar|myModifier} {$smarbar | foo}或类似的东西是的,只需在模板上通过管道传递函数即可

我在controller类中创建了一个需要在模板中使用的函数(因为它多次呈现了模板(每个模板都是网站上的一篇文章,它们都将在新闻提要中以不同的值显示)。是否有方法在smarty变量中调用它? 假设您在控制器中创建了一个函数:

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})}
,有可能吗?这实际上是可行的。那些投反对票的人请解释它不好的一面