我正在尝试将自己的扩展名添加到Twig。 基本用法是有效的,但我想要的是我可以使用供应商前缀调用我的函数。
实施例: LinkViewHelper:
class LinkViewHelper extends \Twig_Extension {
public function getFunctions()
{
return array(
'link' => new \Twig_Filter_Method(
$this,
'link',
array('is_safe' => array('html'))
)
);
}
public function link($text, $uri, array $additionalParams = array(), array $aTagParams = array(), $external=false)
{
$uri = $this->uri($uri, $additionalParams, $external);
// Some additional parsing
return $url; // will be somehting like <a href="http://www.google.de" target="_blank">Go to Google now!</a>
}
public function uri($uri, array $additionalParams = array(), $external = false)
{
// Some parsing goes here
return $uri; // will be something like http://www.google.com/
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return 'url';
}
}
加载我的引导程序:
$this->environment->addExtension(new LinkViewHelper());
现在我可以使用{{ link }}
调用该函数,但我想要的是将其称为{{ url.link }}
。我怎样才能做到这一点?
的问候, cefuroX
编辑: 说真的,对一个问题进行投票,因为你不明白这个问题根本没用:)
答案 0 :(得分:0)
好的,我在回复我的帖子时想到并提到: 如果将Extension设置为Global,则可以将其与供应商前缀一起使用。 但它总会逃避你的回报,所以如果你需要像我这样的html东西,你必须回复而不是回归它:
public function link($text, $uri, array $additionalParams = array(), array $aTagParams = array(), $external=false)
{
$uri = $this->uri($uri, $additionalParams, $external);
// Some additional parsing
echo $url; // will be somehting like <a href="http://www.google.de" target="_blank">Go to Google now!</a>
}
在我的情况下,这是我需要的,但它并不优雅......我会打开这个问题,并且不会将此标记为正确的答案,因为我认为必须有一个更优雅的方式来做到这一点。
Thnx to @Matteo让我回到全球解决方案:)
的问候,
塞巴斯蒂安