5

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

我试着这样做

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

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

我该怎么做呢?

4

3 回答 3

9

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

在 下创建一个 Twig 扩展或过滤器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像使用任何 Twig 的默认过滤器一样简单地使用调用的过滤器,例如:

...

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

...
于 2016-07-23T12:38:56.603 回答
3

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

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

在此处查看操作方法。

于 2013-01-05T10:07:56.920 回答
0

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

来源: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>
于 2020-05-09T17:51:16.483 回答