Puncte:1

Pot folosi serviciul de sesiune direct în loc de prin intermediul solicitării?

drapel co

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');
  }

}
Puncte:0
drapel cn

... există un risc în această abordare?

Dacă aveți mai multe solicitări, puteți obține obiectul de sesiune greșit. Drupal a mutat o mulțime de lucruri din obiectul de solicitare, cum ar fi rutarea și chiar informațiile despre cale, dar nu a implementat un serviciu de sesiune stivuită și, în schimb, a păstrat obiectul de sesiune în stiva de solicitări.

Dacă doriți să injectați acest serviciu, există deja o proprietate în FormBase cu metode getter și setter.

Funcționează injectat sau nu (vezi comentariile din partea de sus a clasei):

$session = $this->getRequest()->getSession();
Neograph734 avatar
drapel co
Mulțumesc, nu știam că Formularul avea deja o metodă de acces la cerere; aceasta este, evident, cea mai curată cale. Încă nu înțeleg pe deplin cum pot exista mai multe sesiuni pentru un singur utilizator, aș spune că toate solicitările fac parte din aceeași sesiune. Pot, totuși, să înțeleg că a doua file și solicitările AJAX ar putea modifica conținutul sesiunii.
4uk4 avatar
drapel cn
De exemplu, într-un test, puteți bate joc de o sesiune sau un alt modul ar putea rula formularul într-o sub-solicitare cu o sesiune diferită de cererea principală.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.