我有一个简单的视图助手“标题”,其中包含两个参数title
和subtitle
。我的助手扩展了AbstractTranslatorHelper以翻译两个字符串。
现在我有了这个案例,我必须在给定的字符串中设置一些变量。通常我会用sprintf($this->translate('My string with the variable %s', 'test')
执行此操作。但是如何在我的帮助器中设置字符串和变量来处理其中的转换。或者在我设置之前我是否真的需要翻译它?
目前我这样做,但我真的不喜欢它......
$this->header(sprintf($this->translate('title with variable %s'), 'test'), 'subtitle')
答案 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;
}
}
使用此代码调用setTitleVariables
或setSubtitleVariables
,您可以为这两个字符串传递变量
然后,使用填充的帮助程序来选择如何呈现这些字符串。
但我建议你这个方法:
public function render()
{
return "<h1>" . $this->title . "</h1>" . "<h3>" . $this->subtitle . "</h3>";
}
当然,只要您渲染字符串,就可以使用.phtml
文件或任何您想要的内容进行设计
然后是下面的代码:
$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->render();
会做完整的事情!