web-dev-qa-db-fra.com

Dans TWIG, est-il possible d'obtenir l'URL absolue d'un lien avec twig variables dedans?

J'ai plusieurs URL qui se présentent comme suit:

{{domainID}}/action/{{userId}}/anotherAction

Et cette dernière URL pointe vers:

http://localhost/viewA/{{domainID}}/action/{{userId}}/anotherAction

Cependant, si j'essaie de charger viewA depuis viewB via un iframe, le lien à l'intérieur de viewA au lieu de pointer vers:

http://localhost/viewA/{{domainID}}/action/{{userId}}/anotherAction

il indiquera:

http://localhost/viewB/{{domainID}}/action/{{userId}}/anotherAction

et l'utilisateur se retrouvera dans une page 404 s'il suit cette dernière.

Ma question est:

Existe-t-il de toute façon pour obtenir le chemin absolu d'une URL construite de cette façon en brindille?

MODIFIER

La définition de l'itinéraire est:

@Route("/domain/details/{domainId}", name="domain_detailed_view")

J'ai essayé d'obtenir le chemin absolu de cette façon:

{{ url({{domainID}}/action/{{userId}}/anotherAction) }}

mais je reçois cette erreur:

Une clé de hachage doit être une chaîne entre guillemets, un nombre, un nom ou une expression entre parenthèses

28
ILikeTacos

Les fonctions url ou path prennent le nom de la route, pas le chemin. Vous pouvez lui donner un tableau associatif comme deuxième argument facultatif si l'itinéraire nécessite des paramètres.

Par exemple:

{{ url('domain_detailed_view', { 'domainId': domainId, 'userId': userId }) }}

http://symfony.com/doc/master/reference/twig_reference.html

58
kunal

Je sais que c'est vieux et a répondu, mais avec symfony 3 & twig you can do:

{{ app.request.getSchemeAndHttpHost() }}

/* will match even port :) i.e.
 * http://localhost:8000
 * http://localhost
 * http://example.com
 */

ce qui est extrêmement utile: D

9
Tom St

Vous avez deux façons de faire la même chose. En général, vous pouvez utiliser url() ou un chemin à l'intérieur de la fonction absolue_url comme ceci absoulute_url (chemin (...)) . Considérer ce qui suit:

// example 1:
{{ url('domain_detailed_view', { 'domainId': domainId, 'userId': userId }) }}
// example 2:
{{ absolute_url(path('domain_detailed_view', { 'domainId': domainId, 'userId': userId })) }}">

// note - those two do the same thing

En général, depuis Symfony 2.7, vous pouvez également utiliser absolute_url () avec les assertions et le chemin relatif (par rapport au dossier web/racine). Voici comment vous pouvez les utiliser pour définir le chemin absolu de l'image dans le bundle et dans le dossier Web principal:

[app/src/UserBundle/Resources/public/img/image.jpg]

<img src="{{ absolute_url(asset('bundle/user/img/image.jpg')) }}" /> // new way since 2.7 up
<img src="{{ asset('bundle/user/img/image.jpg', absolute: true ) }}" /> // old way below 2.7 removed in symfony 3.0

[web/css/img/some.jpg]

<img src="{{ absolute_url('css/img/some.jpg') }}" /> 

C'est ce que symfony recommande d'utiliser lors du rendu de la vue e-mail. http://symfony.com/doc/current/email.html

5
DevWL