1

我正在尝试将我自己的扩展添加到 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 }}。我怎样才能做到这一点?

问候,头孢呋辛

编辑:说真的,因为你不理解这个问题而对一个问题投反对票根本没有用:)

4

1 回答 1

0

好的,正如我在回复我的帖子中所想和提到的:如果您将扩展设置为全局,则可以将其与供应商前缀一起使用。但它总是会逃避你的回报,所以如果你需要像我这样的 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 让我回到全球解决方案:)

问候,

塞巴斯蒂安

于 2015-06-09T09:14:58.327 回答