2013-01-05 46 views
4

我使用symfony 2.0.19,並且我試圖創建一個到外部URL的超鏈接,這個URL是從數據庫中檢索的,我試過這樣做Symfony2 - 超鏈接到使用TWIG從數據庫中檢索到的外部url

<td><a href="{{dominio.url}}">{{dominio.url}}</a></td> 

,但我得到的路徑是到URL裏面的基礎URL例如「本地主機/網絡/ www.tralalalala.com」的相對路徑,而不是僅僅「www.tralalalala.com」

怎麼辦我這樣做?

+0

更換'本地主機/網絡/'只要你有變量'dominio.url' ......而當你把它上傳到服務器,只保留了'dominio.url'並刪除替換方法:否則,編輯.htaccess文件! –

+3

如果dominio.url只是www.tralalala.com你需要做'​​{{dominio.url}}' – Luke

回答

3

我建議你建立你自己的樹枝過濾器。

如果您的網址已經有http://,請不要添加它,否則請添加它。

檢查here的方法。

4

這裏是Pierrickouw被暗示的具體例子:

創建src/Twig下一個枝杈伸展或過濾器,並調用它例如ExternalLinkFilter。定義類,如下所示:

<?php 

namespace AppBundle\Twig; 

class ExternalLinkFilter extends \Twig_Extension 
{ 
    public function getFilters() 
    { 
     return array(
      new \Twig_SimpleFilter('external_link', array($this, 'externalLinkFilter')), 
     ); 
    } 

    /* source: http://stackoverflow.com/a/2762083/3924118 */ 
    public function externalLinkFilter($url) 
    { 
     if (!preg_match("~^(?:f|ht)tps?://~i", $url)) { 
      $url = "http://" . $url; 
     } 

     return $url; 
    } 

    public function getName() 
    { 
     return 'external_link_filter'; 
    } 
} 

?> 

現在,你應該在config/services.yml如下注冊此類的服務:

services: 

    # other services 

    app.twig.external_link: 
     class: AppBundle\Twig\ExternalLinkFilter 
     public: false 
     tags: 
      - { name: twig.extension } 

現在,你可以簡單地使用過濾器稱爲external_link,你會使用任何嫩枝的默認的,如:

... 

<a href="{{check.hostname | external_link }}"> {{check.hostname}}</a> 

...