Getting the base url of the website and globally passing it to twig in Symfony 2
I'm making the switch from CodeIgniter to Symfony 2. Can someone please give me an example of how to:
- Get the base url (the url without the route specific parts)
- Globally pass this variable to the twig bundle so I can use it in every template.
Solution 1:
This is now available for free in twig templates (tested on sf2 version 2.0.14)
{{ app.request.getBaseURL() }}
In later Symfony versions (tested on 2.5), try :
{{ app.request.getSchemeAndHttpHost() }}
Solution 2:
Why do you need to get this root url ? Can't you generate directly absolute URL's ?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
This Twig code will generate the full http:// url to the _demo_hello route.
In fact, getting the base url of the website is only getting the full url of the homepage route :
{{ url('homepage') }}
(homepage, or whatever you call it in your routing file).
Solution 3:
You can use the new request method getSchemeAndHttpHost()
:
{{ app.request.getSchemeAndHttpHost() }}
Solution 4:
Valid from Symfony v2.1 through v4.1+
If you want the base URL to a Symfony application, you should use getSchemeAndHttpHost()
concatenated together with getBaseUrl()
, similar to how getUri()
works, except without the router path and query string.
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
For example, if your Symfony website URL lives at https://www.stackoverflow.com/app1/
, then these two methods return these values:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
Note: getBaseUrl()
includes the script filename (ie /app.php
) if it's in your URL.
Solution 5:
Base url is defined inside Symfony\Component\Routing\RequestContext
.
It can be fetched from controller like this:
$this->container->get('router')->getContext()->getBaseUrl()