5

私はSymfony2.0.19を使用しています。データベースから取得した外部URLへのハイパーリンクを作成しようとしています。

私はこれをやってみました

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

しかし、私が取得するパスは、単なる「www.tralalalala.com」ではなく、ベースURLの例「localhost / web/www.tralalalala.com」のURLへの相対パスです。

どうすればよいですか?

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フィルターを作成することをお勧めします。

URLがすでにある場合はhttp://、追加しないでください。追加しない場合は、追加してください。

ハウツーについてはこちらをチェックしてください。

于 2013-01-05T10:07:56.920 に答える
0

nbroの答えのsymfony5バージョンは次のようになります:(これはdbから読み取られるすべての種類の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';
        }
    }

    ?>

サービスとして登録する必要はありません。Symfony5はそのTwig拡張機能の存在に気付くでしょう

@nbroが提案するように、小枝テンプレートで使用します

    <a href="{{check.hostname | external_link }}"> {{check.hostname}}</a>
于 2020-05-09T17:51:16.483 に答える