How to get the canonical url of a path, actual route and host domain with twig

With twig you can generate a url using the path tag, however this function only generates a relative path to your resources.

{{path("myroute_edit",{"id":4})}} 
{# Outputs: 
  /myroute/edit/4
  But wheres my domain :( ?
#}

But sometimes, a relative path is not only what we need (although is functional for redirect to another path), for example to optimize SEO you are likely to handle canonical urls.

Server and routes with canonical url

To retrieve the canonical path of your domain (including protocol) use:

{{app.request.getSchemeAndHttpHost()}}

Then, if you need for example the canonical path of a resource (an image), then you'll use :

<img src="{{app.request.getSchemeAndHttpHost()}}{{asset('path-to/image.png')}}" />

{# or #}

{% set domain = app.request.getSchemeAndHttpHost() %}
{% set filepath = asset('path-to/image.png')%}

<img src="{{domain ~ filepath}}" />

{# that should ouput something like #}

<img src="http://ourcodeworld.com/path-to/image.png" />

And if you need to retrieve the canonical url of a route, then use :

{% set domain = app.request.getSchemeAndHttpHost() %}
{% set route = path('myroute_identifier')%}

<a href="{{domain ~ route}}">Go to my route</a>

Actual url

To generate the actual url with twig use :

{{ url(app.request.attributes.get("_route"), app.request.attributes.get("_route_params")) }}

For example, to optimize seo you should include

<meta property="og:url" content="{{ url(app.request.attributes.get("_route"), app.request.attributes.get("_route_params")) }}"/>

{#For example for the actual article, the path should be #}

<meta property="og:url" content="http://ourcodeworld.com/articles/read/105/how-to-get-the-canonical-url-of-a-path-actual-route-and-host-domain-with-twig"/>
Become a more social person