使用TWIG从数据库检索的外部URL的超链接

时间:2013-01-05 06:21:15

标签: symfony doctrine-orm twig

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

我试过这个

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

但我获得的路径是URL 里面的基本URL示例“localhost / web / www.tralalalala.com”的相对路径,而不仅仅是“www.tralalalala.com”。< / p>

我该怎么做?

3 个答案:

答案 0 :(得分:8)

以下是 Pierrickouw 建议的具体示例:

src/Twig下创建一个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的过滤器,就像使用任何Twig的默认过滤器一样,例如:

...

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

...

答案 1 :(得分:3)

我建议您构建自己的Twig过滤器。

如果您的网址已经有http://,请不要添加,否则请添加。

检查here以了解操作方法。

答案 2 :(得分:0)

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

来源:https://symfony.com/doc/current/templating/twig_extension.html

在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将注意到该Twig扩展的存在

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

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