【问题标题】:Smarty: is it possible to call a PHP function (from the controller class) inside the template?Smarty:是否可以在模板中调用 PHP 函数(来自控制器类)?
【发布时间】:2014-08-28 14:31:04
【问题描述】:

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

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

然后在模板中:

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

【问题讨论】:

  • 您的意思是可以将函数设为静态以便 bar 在每次调用时递增吗?
  • 不不,我只是想知道是否可以在 smarty 模板文件中调用 PHP 函数。该函数只是一个示例。其余的文字解释了我为什么要这样做。

标签: php function smarty


【解决方案1】:

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

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 文档。

【讨论】:

  • 只是一个警告,在静态上下文中调用未声明为静态的方法现在已在今天早些时候的 5.6 版本中弃用。
【解决方案2】:

是的,只需在模板上传递函数

{$myvar|my_function)

【讨论】:

  • 这确实有效。那些不赞成投票的人请解释它的不好的一面
【解决方案3】:

一切都取决于您的需求,但如果您只是想使用这样的代码,您可以将对象分配给 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

作为输出。

【讨论】:

  • 如果我想提交一个 smarty 数组值作为参数呢?比如{$a->foo({$array.key})}?有可能吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2015-12-22
  • 2016-04-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多