我正在尝试添加我自己的扩展到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';
}
}
Loading in my bootstrap:
$this->environment->addExtension(new LinkViewHelper());
现在我可以用{{ link }}
来称呼这个函数但是我想用{{ url.link }}
来称呼它。我怎样才能做到这一点呢?
问候,cefuroX
编辑:说真的,因为你不理解一个问题而拒绝投票根本没有用:)
好吧,正如我在回复我的帖子时所说的:如果您将扩展设置为全局,则可以将其与供应商前缀一起使用。但是它总是会转义你的返回值所以如果你需要像我这样的html内容你必须ECHO你的返回值而不是返回它:
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>
}
在我的情况下,这是我需要的,但它一点也不优雅…我将让这个问题开放,不会把它标记为正确答案,因为我认为必须有一个更优雅的方法来做到这一点。
感谢@Matteo把我带回全球解决方案:)
问候,塞巴斯蒂安