2015-05-31 67 views
1

我想添加我自己的擴展到樹枝。 基本用法正在工作,但我想要的是,我可以用供應商前綴調用我的函數。使用供應商前綴的樹枝延長

舉例: 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

爲什麼不加的,而不是一個功能的過濾器,你可以做'{網址|友情鏈接''?如果你想做'{{url.link}}',函數鏈接必須是對象url的函數。 – Med

+0

因爲「url」不是字符串,而是ViewHelper的名稱。 它在邏輯上不是過濾器。我不想過濾我想要創建網址的網址。 過濾器在這裏不是一個有用的選項。 –

+1

您是否試圖按照[此處](http://twig.sensiolabs.org/doc/advanced.html#globals)所述將您的對象註冊爲全局對象? – Matteo

回答

0

好了,因爲我想在我的答覆中提到到我的文章: 如果您將擴展設置爲全局,則可以將其與供應商前綴一起使用。 但它永遠逃不出你的回報,所以如果你需要的東西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到@Matteo到把我帶回全球解決方案:)

問候,

塞巴斯蒂安