Comment accéder aux cookies ou la demande d'un service? symfony
Question
J'ai un service, ce qui nécessite d'obtenir des informations de la demande.
Je ne veux pas passer ces valeurs au service tout le temps, donc il est possible que le service reçoit des informations sur la demande et surtout les cookies en lui-même?
class SomeService {
public function someMethod() {
// access request and cookies, whithout passing in those values
}
}
La solution
inject le service request
alors.
Vous avez sûrement une définition de service, modifier comme ceci:
<service id="my_service" class="SomeService" scope="request">
<argument type="service" id="request" />
</service>
Ensuite, dans votre classe, créez une méthode __construct qui recevra l'objet de requête:
class SomeService
{
private $request;
public function __construct(Request $request) {
$this->request = $request;
}
public function someMethod() {
$this->request->getSession();
}
}
Autres conseils
Vous pouvez également, à partir de Symfony 2.4, vous pouvez facilement injecter le nouveau service de @request_stack
.
De la docs :
Si vous essayez d'injecter le service de demande, la solution simple est d'injecter le service au lieu
request_stack
et accéder au courant Demande en appelant la méthode degetCurrentRequest()
( voir Pourquoi ne pas Injecter la demande service