J'ai une application avec Symfony2 (2.2). Quand je veux envoyer un courrier, j'ai des problèmes avec les chemins, qui sont tous des chemins relatifs et ne fonctionnent évidemment pas dans les emails
pour rendre les chemins que j'utilise:
<a href="{{ path('route_name', {'param' : value}) }}">A link</a>
et pour les actifs:
<img src="{{ asset('bundle/myname/img/image.gif') }}" alt="Title"/>
Les exemples précédents fonctionnent bien mais les chemins sont relatifs, je dois donc ajouter le domaine. Je peux faire quelque chose comme:
<a href="http://domain.com{{ path('route_name', {'param' => param1}) }}">A link</a>
mais ce n'est pas la meilleure solution à mon problème, car j'ai différents domaines.
J'ai trouvé la solution pour les chemins avec la fonction url
mais j'ai toujours besoin d'une solution pour les actifs.
Pour Symfony 2.7 et plus récent
Voir this répondre ici.
1ère option de travail
{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemo/images/search.png') }}
2ème option de travail - préféré
Je viens de faire un test rapide avec une nouvelle copie propre de Symfony. Il existe également ne autre option qui combine schéma et httpHost:
{{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemo/images/search.png') }}
{# outputs #}
{# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css #}
Symfony 2.7 a un nouveau absolute_url qui peut être utilisé pour générer l’URL absolue. http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes
Cela fonctionnera sur ces deux cas ou sur une chaîne de chemin:
<a href="{{ absolute_url(path('route_name', {'param' : value})) }}">A link</a>
et pour les actifs:
<img src="{{ absolute_url(asset('bundle/myname/img/image.gif')) }}" alt="Title"/>
Ou pour tout chemin de chaîne
<img src="{{ absolute_url('my/absolute/path') }}" alt="Title"/>
sur ces cas d'arborescence, vous allez vous retrouver avec une URL absolue comme
http://www.example.com/my/absolute/path
Depuis documentation Symfony2 : Des URL absolues pour les actifs ont été introduites dans Symfony 2.5.
Si vous avez besoin d'URL absolues pour les actifs, vous pouvez définir le troisième argument (ou l'argument absolu) sur true:
Exemple:
<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
La réponse de Daniel semble fonctionner correctement pour le moment, mais veuillez noter que la génération d'URL absolues à l'aide de la fonction asset
de twig est maintenant obsolète:
DEPRECATED - La génération d’URL absolues avec la fonction Twig asset () est obsolète dans la version 2.7 et sera supprimée dans la version 3.0. Veuillez utiliser absolute_url () à la place.
Voici l'annonce officielle: http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes
Vous devez utiliser le absolute_url
twig fonction:
{# Symfony 2.6 #}
{{ asset('logo.png', absolute = true) }}
{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}
Il est intéressant de noter que cela fonctionne également avec la fonction path
:
{{ absolute_url(path('index')) }}
Vous voulez probablement utiliser le assets_base_urls
configuration.
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
Notez que la configuration est différente depuis Symfony 2.7 :
framework:
# ...
assets:
base_urls:
- 'http://cdn.example.com/'
Ce qui suit fonctionne pour moi:
<img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />
Il est possible d'avoir http://test_site.com et https://production_site.com . Ensuite, coder l’URL en dur est une mauvaise idée. Je suggérerais ceci:
{{app.request.scheme ~ '://' ~ app.request.Host ~ asset('bundle/myname/img/image.gif')}}
J'ai utilisé les conseils suivants de la documentation https://symfony.com/doc/current/console/request_context.html pour obtenir des URL absolues dans les courriels:
# config/services.yaml
parameters:
router.request_context.Host: 'example.org'
router.request_context.scheme: 'https'