使用供应商前缀为Twig扩展


Using vendor prefix for Twig Extension

我正在尝试添加我自己的扩展到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把我带回全球解决方案:)

问候,塞巴斯蒂安