我有一个简单的视图助手"Header“,它有两个参数title和subtitle。我的助手扩展了用于翻译这两个字符串的AbstractTranslatorHelper。
现在我有了这样的情况,我必须在给定字符串中设置一些变量。通常我会用sprintf($this->translate('My string with the variable %s', 'test')来做这件事。但是如何设置我的助手中的字符串和变量,来处理其中的转换。或者我真的需要在设置它之前翻译它?
现在我是这样做的,但我不太喜欢.
$this->header(sprintf($this->translate('title with variable %s'), 'test'), 'subtitle')发布于 2017-04-13 09:37:22
你可以做到的
$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();会做完所有的事!
https://stackoverflow.com/questions/43387291
复制相似问题