The Documentație Drupal pe sesiuni menționează că sesiunile pot fi accesate prin obiectul Solicitare:
Datele sesiunii sunt accesate prin intermediul
\Symfony\Component\HttpFoundation\Request::getSession()
metoda, care
returnează o instanță de
\Symfony\Component\HttpFoundation\Session\SessionInterface
. Cel mai
metodele importante de pe SessionInterface sunt set(), get() și remove().
Cu toate acestea, am descoperit și că există o serviciu de sesiune.
Într-o clasă în care trebuie să folosesc injecția de dependență și nu am în mod implicit acces la obiectul Request, mai trebuie să accesez sesiunea prin cerere sau o pot folosi direct? În schimb, încărcarea solicitării și apoi accesarea sesiunii se simte ca și cum ați adăuga o suprasarcină.
Am încercat codul de mai jos, care pare să funcționeze bine. Atunci de ce majoritatea exemplelor și chiar documentația demonstrează în continuare modul de solicitare? Oare îmi scapă ceva sau există un risc în această abordare?
clasa MyForm extinde FormBase {
/**
* Sesiunea.
*
* @var \Symfony\Component\HttpFoundation\Session\Session
*/
protejat $session;
/**
*
* @param \Symfony\Component\HttpFoundation\Session\Session $session
* Sesiunea.
*/
funcția publică __construct($session) {
$this->session = $session;
}
/**
* {@inheritdoc}
*/
funcția publică statică create(ContainerInterface $container) {
returnează static nou (
$container->get('sesiune')
);
}
function somefunction() {
$this->session->get('valoare');
$this->session->set('value', 'somevalue');
}
}