ZF3 - AbstractTranslatorHelper和sprintf

时间:2017-04-13 08:33:55

标签: php zend-framework2 zend-framework3

我有一个简单的视图助手“标题”,其中包含两个参数titlesubtitle。我的助手扩展了AbstractTranslatorHelper以翻译两个字符串。

现在我有了这个案例,我必须在给定的字符串中设置一些变量。通常我会用sprintf($this->translate('My string with the variable %s', 'test')执行此操作。但是如何在我的帮助器中设置字符串和变量来处理其中的转换。或者在我设置之前我是否真的需要翻译它?

目前我这样做,但我真的不喜欢它......

$this->header(sprintf($this->translate('title with variable %s'), 'test'), 'subtitle')

1 个答案:

答案 0 :(得分:0)

你可以这样做

$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->setSubtitleVariables([$subVars]);

你的主要代码是:

class HeaderHelper extends AbstractTranslatorHelper
{
    public function __invoke($title, $subtitle)
    {
        $this->title = $title;
        $this->subtitle = $subtitle;

        return $this;
    }

    public function setTitleVariables(array $variables)
    {
        $this->title = $this->translate(vsprintf($this->title, $variables));
        return $this;
    }

    public function setSubtitleVariables( array $variables)
    {
        $this->subtitle = $this->translate(vsprintf($this->subtitle, $variables));
        return $this;
    }
}

使用此代码调用setTitleVariablessetSubtitleVariables,您可以为这两个字符串传递变量

然后,使用填充的帮助程序来选择如何呈现这些字符串。

但我建议你这个方法:

 public function render()
    {
        return "<h1>" . $this->title . "</h1>" . "<h3>" . $this->subtitle . "</h3>";
    }

当然,只要您渲染字符串,就可以使用.phtml文件或任何您想要的内容进行设计 然后是下面的代码:

$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->render();

会做完整的事情!