2013-01-05 66 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> 

...