Score:1

เหตุใดฉันจึงได้รับผลลัพธ์ที่แตกต่างกันสำหรับเอนทิตี::บันทึก() ระหว่าง REST และเว็บ

ธง cn

ฉันกำลังปรับโครงสร้างเอนทิตีผู้ใช้ของฉันเพื่อใช้ คลาสกลุ่มเอนทิตี.

ก่อนหน้านี้ ฉันบันทึกค่าของการชดเชยเวลาในฟิลด์โดยใช้ 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
ความละเอียด: ทรัพยากร
การกำหนดค่า:
  วิธีการ:
    - โพสต์
  รูปแบบ:
    - เจสัน
  การรับรองความถูกต้อง:
    - คุกกี้
my flag
คุณใส่ xdebug บนสิ่งนี้หรือคุณตรวจสอบผ่าน Storm / IDE ว่าถูกต้องทุกประเภทหรือไม่? `$this` มาในรูปแบบไหน? ฉันคิดว่าคุณมีปัญหาหนึ่งในสองข้อ (1) User vs Account object หรือ (2) ปัญหา String vs DateTimeZone ฉันใช้คอมพิวเตอร์ผิดเครื่อง แต่ฉันไม่คิดว่าคุณต้องการการเรียก `timezone_open ` ที่ชัดเจน ฉันคิดว่าวัตถุ `DateTimeZone` ที่เหมาะสมจะถูกส่งผ่านใน API เสมอ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา