How can I generate a link from a service? I've injected "router" inside my service, however generated links are /view/42
instead of /app_dev.php/view/42
. How can I solve this?
My code is something like this:
services.yml
services:
myservice:
class: My\MyBundle\MyService
arguments: [ @router ]
MyService.php
<?php
namespace My\MyBundle;
class MyService {
public function __construct($router) {
// of course, the die is an example
die($router->generate('BackoffUserBundle.Profile.edit'));
}
}
So : you will need two things.
First of all, you will have to have a dependency on @router (to get generate()).
Secondly, you must set the scope of your service to "request" (I've missed that). http://symfony.com/doc/current/cookbook/service_container/scopes.html
Your
services.yml
becomes:Now you can use the @router service's generator function !
Important note regarding Symfony 3.x: As the doc says,
I had a similar issue, but using Symfony 3. While eluded to in the previous answer, it was a bit tricky to find out how exactly one would use
request_stack
to achieve the same thing asscope: request
.In this question's case, it would look something like this:
The services.yml config
And the MyService Class
Note: Accessing RequestStack in the constructor is advised against since it could potentially try to access it before the request is handled by the kernel. So it may return null when trying to fetch the request object from RequestStack.