Puncte:0

Drupal::messenger() nu funcționează în funcția de închidere

drapel sa

De ceva vreme trebuie să folosesc o funcție de închidere. Iată un exemplu stupid:

...
drupal_register_shutdown_function('display_message');
...

function display_message() {
  Drupal::messenger()->addMessage('Bună lume');
}

Este posibil să afișați acest mesaj ca deocamdată, nu funcționează (chiar la reîmprospătarea paginii următoare)?

După cum mi-am cerut, voi explica de ce trebuie să folosesc funcția de închidere.

Cazul meu de utilizare:

Suntem în cârligul de presalvare a nodul A care tocmai a primit o nouă stare personalizată (care trebuie salvată), să spunem starea 5.

Când acest tip de nod ajunge la starea 5, trebuie să salvez/actualizez altul nodul B care conține o referință la nodul A.

În cârligul de presare al nodul B, calculele se fac folosind valoarea acestui statut... asta înseamnă starea de nodul A trebuie salvate înainte de a începe calculele.

Acesta este motivul pentru care amân salvarea nodul B cu o funcție de închidere, dar toate mesajele utilizatorului final nu sunt afișate.

Puteți argumenta că în cârligul de presalvare al nodul A, pot apela o funcție cu starea și nodul A ca parametru care va face treaba; dar sunt multe schimburi/referințe ca acesta și pentru a evita un cod spaghetti, am pus tot codul meu de model de business în funcțiile de presave ale acelor două tipuri de noduri.

Puncte:2
drapel cn

Acest lucru este oarecum inutil. Nu puteți reda mesajul, pagina este deja redată. Și nu puteți transfera mesajul la următoarea reîmprospătare a paginii fără o sesiune. Dacă ar exista o sesiune, aceasta ar fi închisă până acum. Dacă nu a existat nicio sesiune, nu ați putea deschide una acum și nu puteți trimite un cookie de sesiune după ce răspunsul este deja terminat.

Baud avatar
drapel sa
Este prima dată când folosesc această caracteristică (de exemplu pentru a salva un nod după încheierea tuturor tranzacțiilor DB). Ceea ce spui pare inteligent. Știți o altă modalitate de a rula un cod chiar înainte de începerea randării, dar după încheierea tranzacțiilor DB?
drapel cn
@Baud Se pare că ai putea suferi de sindromul problemei XY - dacă aș fi în locul tău, aș face un pas înapoi și aș încerca să explic care este scopul tău final, de ce simți că trebuie să adaugi acest mesaj într-un anumit punct al ciclul de viață al paginii, mai degrabă decât să o lași să urmeze fluxul normal, așa ceva. În caz contrar, probabil că veți primi doar răspunsuri ca acesta și, deși este precis și util, nu vă rezolvă problema deoarece problema nu este pe deplin înțeleasă
Baud avatar
drapel sa
@Clive Mi-am actualizat întrebarea... Nu sunt sigur că este suficient de clară.

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.