Am attempting to build the full request uri
that used in Browser/UserAgent
by the EndUser/Program
.
- Is this the correct way to do it, in Slim ?
- Will it work under all circumstance ?
Inspected the URI object; could not find a single method that does this task. I mean β¦ something like $uri->getFullUrl();
$container = $app->getContainer();
$request = $container['request'];
$uri = $request->getUri();
$baseUrl = $uri->getBaseUrl();
$path = $uri->getPath();
$query = $uri->getQuery();
$pathFixed = ($path && ($path[0] !== '/')) ? ('/' . $path) : ($path);
$queryFixed = ($query) ? ('?' . $query) : ($query);
$fullUrl = $baseUrl . $pathFixed . $queryFixed;
/*
Samle Output(s) :
http://example.com/
http://example.com/foo
http://example.com/foo/
http://example.com/foo/bar
http://example.com/foo/bar/
http://example.com/foo/bar?a=1&b=2&c=3
http://example.com/foo/bar/?a=1&b=2&c=3
http://www.example.com/
https://www.example.com/
https://doc.example.com/
http://www.example.com:1234/foo
https://www.example.com:1234/foo
*/
Thnaks in advance
Susanth K
Try casting the Url instance to a string
1 Like
@JoeBengalen
WOW ! That simple ! Thank you. Itβs working.
$fullUrl = (string) $uri; // just TypeCast !!! <3 slim !
casting works fine even when basePath
has a value or not ( empty ββ )
Though this casting trick is not documented in docs.
Hope this will not change in future release treating as an Undocumented feature.
Thank You
Susanth K
This functionality is specified in PSR-7 so not very likely to change
1 Like
Yes! PSR-7 Support is a highlighted feature. So we can trust.
But this facility appear like a hidden feature. I wish, if below is possible.
$fullUrl = $uri->getFullUrl();
let me raise a feature request @ github.
Edit :
Done : https://github.com/slimphp/Slim/issues/1966
Please up vote at github by +1 or comment, if you support this implementation request.
Thanks
Susanth K
Hi @JoeBengalen,
BTW; Never retrieve the request from the container. Always use the one given to the callable.
originally commented at GitHub. moved here, to make less cluttered there @github.
Yes. I prefer to use the given nearest $response object where ever applicable.
There are circumstances we need access globally / out of call back scope.
For example please see this thread ; There, inside function addRoutesForCurrentPath($app){ //... }
.
Hope, in such situations, its perfectly valid to retrieve the request
from the container
.
Thank you
Susanth K
I would not recommend to use the request
from the container. It will also be removed from the container in future a version of Slim.
The reason for this is that request
is immutable. This means that changes on the request
made in middleware (or whereever) is not reflected onto the request
in the container, meaning you have an invalid outdated object!
[BC break] Remove Request, Response and Env from container
https://github.com/slimphp/Slim/issues/1686
1 Like
@JoeBengalen
Good clarification, with valid supporting links.
That thread Example could be implemented inside an App level middleware to meet the guidelines.
Thanking you
Susanth K