Puncte:1

De ce obțin rezultate diferite pentru entity::save() între REST și web?

drapel cn

Îmi refactorizez entitățile utilizator pentru a le utiliza clase de pachete de entități.

Înainte, am salvat valoarea unui decalaj de timp într-un câmp folosind hook_user_presave():

// Inițializați în fusul orar al utilizatorului.
$user_timezone = timezone_open($this->getTimeZone());
$time_to_convert = new \DateTime('acum', $user_timezone);
// Setați ora preferată a utilizatorului.
$time_to_convert->setTime($ore, $minute);
// Convertiți în fusul orar implicit al site-ului.
$time_to_convert->setTimezone(timezone_open('Undeva/Undeva'));
$convertit_time = $time_to_convert->format('Bună');

$this->set('field_converted_time', $converted_time);

Acest lucru a funcționat bine pentru înregistrare atât prin intermediul site-ului web Drupal, cât și al aplicației mele web Ionic React (care folosește în principal JSON:API, dar folosește resursa REST pentru înregistrarea utilizatorilor.

Apoi am mutat codul de mai sus la funcția publică salvare() în clasa mea de pachet de entitate utilizator.

Când am făcut acest lucru, înregistrarea utilizatorului site-ului continuă să funcționeze bine, dar înregistrarea decuplată are următoarea eroare:

TypeError: DateTime::__construct(): Argumentul #2 ($timezone) trebuie să fie de tip ?DateTimeZone, bool dat în DateTime->__construct().

Problema este că $this->getTimeZone() nu returnează o valoare în scenariul decuplat, dar de ce? M-am gândit că înregistrarea prin REST ar fi exact la fel ca atunci când vă înregistrați prin intermediul site-ului web - la fel ca și cum hook_user_presave() este executat în același mod.

Iată YAML pentru punctul final de înregistrare a utilizatorilor:

uuid: redactat
langcode: en
stare: adevărat
dependențe:
  modul:
    - serializare
    - utilizator
id: user_registration
plugin_id: user_registration
granularitate: resursă
configuratie:
  metode:
    - POST
  formate:
    - json
  autentificare:
    - prăjitură
drapel my
Ați pus xdebug pe asta sau ați verificat prin Storm / IDE că toate tipurile sunt corecte? De ce tip apare `$this`? Cred că ai una dintre cele două probleme. (1) Obiect utilizator vs cont sau (2) problemă șir vs DateTimeZone. Am un computer greșit, dar nu cred că aveți nevoie de apelurile explicite `timezone_open`. Cred că obiectele `DateTimeZone` adecvate sunt întotdeauna transmise în API.

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.