Quelqu'un sait-il comment accéder à la variable de session dans un service?
J'ai une configuration de service à laquelle je passe le conteneur. Je peux accéder à des choses comme le service Doctrine en utilisant:
// Get the doctrine service
$doctrine_service = $this->container->get('doctrine');
// Get the entity manager
$em = $doctrine_service->getEntityManager();
Cependant, je ne sais pas comment accéder à la session.
Dans un contrôleur, la session est accessible en utilisant:
$session = $this->getRequest()->getSession();
$session->set('foo', 'bar');
$foo = $session->get('foo');
La session fait-elle partie d'un service et, dans l'affirmative, quel est le service appelé?.
Toute aide sera grandement appréciée.
php app/console container:debug
Montre que le service session
est une instance de classe de Symfony\Component\HttpFoundation\Session
, Vous devriez donc pouvoir récupérer la session avec ce nom:
$session = $this->container->get('session');
Après avoir effectué votre travail sur la session, appelez $session->save();
pour tout réécrire dans la session. Par ailleurs, il existe également deux autres services liés à la session qui s'affichent dans mon vidage de conteneur:
session.storage
Instanceof Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage
session_listener
Instanceof Symfony\Bundle\FrameworkBundle\EventListener\SessionListener
Si vous ne voulez pas passer dans le conteneur entier, vous passez simplement @session dans les arguments:
services.yml
my.service:
class: MyApp\Service
arguments: ['@session']
Service.php
use Symfony\Component\HttpFoundation\Session\Session;
class Service
{
private $session;
public function __construct(Session $session)
{
$this->session = $session;
}
public function someService()
{
$sessionVar = $this->session->get('session_var');
}
}
Essayez cette solution:
use Symfony\Component\HttpFoundation\Session\Session;
$session = new Session();
$session->get('variable');
Dans Symfony 4, si vos services sont configurés pour le câblage automatique, vous n'avez pas besoin d'injecter la session manuellement via services.yaml
plus longtemps.
Au lieu de cela, vous injecteriez simplement l'interface de session:
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class SessionService
{
private $session;
public function __construct(
SessionInterface $session
)
{
$this->session = $session;
}
}