使用供应商前缀进行Twig扩展

时间:2015-05-31 12:19:19

标签: php twig 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';
    }
}

加载我的引导程序:

$this->environment->addExtension(new LinkViewHelper());

现在我可以使用{{ link }}调用该函数,但我想要的是将其称为{{ url.link }}。我怎样才能做到这一点?

的问候, cefuroX

编辑: 说真的,对一个问题进行投票,因为你不明白这个问题根本没用:)

1 个答案:

答案 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让我回到全球解决方案:)

的问候,

塞巴斯蒂安