Î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ă