Symfony 指向使用细枝从数据库检索的外部URL的超链接

Symfony 指向使用细枝从数据库检索的外部URL的超链接,symfony,doctrine-orm,twig,Symfony,Doctrine Orm,Twig,我使用的是symfony2.0.19。我正在尝试创建一个指向外部URL的超链接,该URL是从数据库检索的 我试过这么做 <td><a href="{{dominio.url}}">{{dominio.url}}</a></td> 但是我得到的路径是基本URL示例“localhost/web/www.tralala.com”中URL的相对路径,而不仅仅是“www.tralala.com” 我如何做到这一点?我建议您构建自己的细枝过滤器 如果您的

我使用的是symfony2.0.19。我正在尝试创建一个指向外部URL的超链接,该URL是从数据库检索的

我试过这么做

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

但是我得到的路径是基本URL示例“localhost/web/www.tralala.com”中URL的相对路径,而不仅仅是“www.tralala.com”


我如何做到这一点?

我建议您构建自己的细枝过滤器

如果您的url具有
http://
,请不要添加它,否则请添加它


检查如何操作。

下面是一个具体的例子,说明皮耶里科夫的建议:

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';
    }
}

?>
services:

    # other services

    app.twig.external_link:
        class: AppBundle\Twig\ExternalLinkFilter
        public: false
        tags:
            - { name: twig.extension }
现在,您可以简单地使用名为
external\u link
的过滤器,就像使用任何细枝的默认过滤器一样,例如:

...

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

...
。。。
...

nbro的symfony 5版本答案为: (这将处理从数据库读取的所有类型的url)

资料来源:

在src/Twig中创建文件

    <?php 

    namespace App\Twig;

    use Twig\Extension\AbstractExtension;
    use Twig\TwigFilter;

    class ExternalLinkFilter extends AbstractExtension
    {
        public function getFilters()
        {
            return array(
                new TwigFilter('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';
        }
    }

    ?>

您不需要将其注册为服务。Symfony 5将注意到该树枝延伸的存在

按照@nbro的建议在细枝模板中使用它

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


replace
localhost/web/
只要您有该变量
dominio.url
。。。当您将其上传到服务器时,只保留
dominio.url
并删除替换方法:D否则,编辑.htaccess文件!如果dominio.url只是www.tralala.com,您需要执行