ฉันกำลังปรับโครงสร้างเอนทิตีผู้ใช้ของฉันเพื่อใช้ คลาสกลุ่มเอนทิตี.
ก่อนหน้านี้ ฉันบันทึกค่าของการชดเชยเวลาในฟิลด์โดยใช้ hook_user_presave():
// เริ่มต้นในเขตเวลาของผู้ใช้
$user_timezone = timezone_open($this->getTimeZone());
$time_to_convert = ใหม่ \DateTime('ตอนนี้', $user_timezone);
// ตั้งเวลาที่ต้องการของผู้ใช้
$time_to_convert->setTime($ชั่วโมง, $นาที);
// แปลงเป็นเขตเวลาเริ่มต้นของไซต์
$time_to_convert->setTimezone(timezone_open('ที่ไหนสักแห่ง/ที่ไหนสักแห่ง'));
$converted_time = $time_to_convert->รูปแบบ ('สวัสดี');
$this->set('field_converted_time', $converted_time);
สิ่งนี้ใช้ได้ดีสำหรับการลงทะเบียนทั้งผ่านเว็บไซต์ Drupal และเว็บแอป Ionic React ของฉัน (ซึ่งส่วนใหญ่ใช้ JSON:API แต่ใช้ทรัพยากร REST สำหรับการลงทะเบียนผู้ใช้
จากนั้นฉันก็ย้ายรหัสด้านบนไปที่ บันทึกฟังก์ชั่นสาธารณะ () ในคลาสบันเดิลเอนทิตีผู้ใช้ของฉัน
เมื่อฉันทำเช่นนั้น การลงทะเบียนผู้ใช้เว็บไซต์ยังคงทำงานได้ดี แต่การลงทะเบียนแบบแยกส่วนมีข้อผิดพลาดดังต่อไปนี้:
TypeError: DateTime::__construct(): อาร์กิวเมนต์ #2 ($timezone) ต้องเป็นประเภท ?DateTimeZone, บูลที่กำหนดใน DateTime->__construct()
ปัญหาก็คือว่า $this->getTimeZone() ไม่ส่งคืนค่าในสถานการณ์แยกส่วน แต่ทำไม ฉันคิดว่าการลงทะเบียนผ่าน REST จะเหมือนกันทุกประการกับการลงทะเบียนผ่านเว็บไซต์ -- เหมือนกับวิธีการ hook_user_presave() ได้รับการดำเนินการในลักษณะเดียวกัน
นี่คือ YAML สำหรับปลายทางการลงทะเบียนผู้ใช้ของฉัน:
uuid: แก้ไข
รหัสภาษา: th
สถานะ: จริง
การพึ่งพา:
  โมดูล:
    - การทำให้เป็นอนุกรม
    - ผู้ใช้
รหัส: user_registration
plugin_id: user_registration
ความละเอียด: ทรัพยากร
การกำหนดค่า:
  วิธีการ:
    - โพสต์
  รูปแบบ:
    - เจสัน
  การรับรองความถูกต้อง:
    - คุกกี้