wake-up-neo.com

Verwendung des absoluten Pfades in twig Funktionen

Ich habe eine Anwendung mit Symfony2 (2.2). Wenn ich eine E-Mail senden möchte, habe ich Probleme mit den Pfaden, die alle relative Pfade sind und offensichtlich nicht in E-Mails funktionieren

zum Rendern der von mir verwendeten Pfade:

<a href="{{ path('route_name', {'param' : value}) }}">A link</a>

und für Vermögenswerte:

<img src="{{ asset('bundle/myname/img/image.gif') }}" alt="Title"/>

Die vorherigen Beispiele funktionieren einwandfrei, aber die Pfade sind relativ, daher muss die Domäne angehängt werden. Ich kann etwas machen wie:

<a href="http://domain.com{{ path('route_name', {'param' => param1}) }}">A link</a>

dies ist jedoch nicht die beste Lösung für mein Problem, da ich unterschiedliche Domänen habe.

Aktualisieren

Ich habe die Lösung für Pfade mit der Funktion url gefunden, benötige aber noch eine Lösung für Assets.

55
rkmax

Für Symfony 2.7 und neuer

Siehe this hier antworten.

1. Arbeitsoption

{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemo/images/search.png') }}

2. Arbeitsoption - bevorzugt

Habe gerade einen kurzen Test mit einer sauberen neuen Symfony-Kopie gemacht. Es gibt auch eine andere Option , das Schema und httpHost kombiniert:

{{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemo/images/search.png') }}
{# outputs #}
{# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css  #}
79
SirDerpington

Symfony 2.7 verfügt über eine neue absolute_url , mit der die absolute URL generiert werden kann. http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes

Es funktioniert in beiden Fällen oder mit einer Pfadzeichenfolge:

<a href="{{ absolute_url(path('route_name', {'param' : value})) }}">A link</a>

und für Vermögenswerte:

<img src="{{ absolute_url(asset('bundle/myname/img/image.gif')) }}" alt="Title"/>

Oder für einen beliebigen Zeichenfolgenpfad

<img src="{{ absolute_url('my/absolute/path') }}" alt="Title"/>

in diesen Fällen erhalten Sie eine absolute URL wie

http://www.example.com/my/absolute/path
107
Neto Buenrostro

From Symfony2-Dokumentation : In Symfony 2.5 wurden absolute URLs für Assets eingeführt.

Wenn Sie absolute URLs für Assets benötigen, können Sie das dritte Argument (oder das absolute Argument) auf true setzen:

Beispiel:

<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
50
Daniel

Daniels Antwort scheint vorerst gut zu funktionieren, aber bitte beachten Sie, dass das Generieren von absoluten URLs mit der asset -Funktion von twig jetzt veraltet ist:

DEPRECATED - Das Generieren absoluter URLs mit der Funktion Twig asset () wurde in 2.7 als veraltet eingestuft und wird in 3.0 entfernt. Verwenden Sie stattdessen absolute_url ().

Hier ist die offizielle Ankündigung: http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes

Sie müssen das absolute_url twig Funktion:

{# Symfony 2.6 #}
{{ asset('logo.png', absolute = true) }}

{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}

Es ist interessant festzustellen, dass es auch mit der Funktion path funktioniert:

{{ absolute_url(path('index')) }}
23
Quentin S.

Sie möchten wahrscheinlich das assets_base_urls Aufbau.

framework:
    templating:
        assets_base_urls:
            http:   [http://www.website.com]
            ssl:   [https://www.website.com]

http://symfony.com/doc/current/reference/configuration/framework.html#assets


Beachten Sie, dass sich die Konfiguration von Symfony 2.7 unterscheidet:

framework:
    # ...
    assets:
        base_urls:
            - 'http://cdn.example.com/'
13
cheesemacfly

Folgendes funktioniert für mich:

<img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />
3
Indivision Dev

Es ist möglich, http://test_site.com und https://production_site.com zu haben. Dann ist das Hardcodieren der URL eine schlechte Idee. Ich würde folgendes vorschlagen:

{{app.request.scheme ~ '://' ~ app.request.Host ~ asset('bundle/myname/img/image.gif')}}
3
Iliya Kolev

Ich habe die folgenden Hinweise aus den Dokumenten verwendet https://symfony.com/doc/current/console/request_context.html , um absolute URLs in E-Mails zu erhalten:

# config/services.yaml
parameters:
    router.request_context.Host: 'example.org'
    router.request_context.scheme: 'https'
1
antongorodezkiy