ฉันกำลังปรับโครงสร้างเอนทิตีผู้ใช้ของฉันเพื่อใช้ คลาสกลุ่มเอนทิตี.
ก่อนหน้านี้ ฉันบันทึกค่าของการชดเชยเวลาในฟิลด์โดยใช้ 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
ความละเอียด: ทรัพยากร
การกำหนดค่า:
วิธีการ:
- โพสต์
รูปแบบ:
- เจสัน
การรับรองความถูกต้อง:
- คุกกี้