Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate a link from a service

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'));     } } 
like image 219
Maël Nison Avatar asked Apr 07 '12 18:04

Maël Nison


1 Answers

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:

services:     myservice:         class: My\MyBundle\MyService         arguments: [ @router ]         scope: request 

Now you can use the @router service's generator function !


Important note regarding Symfony 3.x: As the doc says,

The "container scopes" concept explained in this article has been deprecated in Symfony 2.8 and it will be removed in Symfony 3.0.

Use the request_stack service (introduced in Symfony 2.4) instead of the request service/scope and use the shared setting (introduced in Symfony 2.8) instead of the prototype scope (read more about shared services).

like image 69
Maël Nison Avatar answered Oct 14 '22 08:10

Maël Nison