Tôi đang tái cấu trúc các thực thể người dùng của mình để sử dụng các lớp gói thực thể.
Trước đây, tôi đã lưu giá trị của thời gian bù vào một trường bằng cách sử dụng hook_user_presave()
:
// Khởi tạo theo múi giờ của người dùng.
$user_timezone = timezone_open($this->getTimeZone());
$time_to_convert = new \DateTime('now', $user_timezone);
// Đặt thời gian ưa thích của người dùng.
$time_to_convert->setTime($giờ, $phút);
// Chuyển đổi sang múi giờ mặc định của trang web.
$time_to_convert->setTimezone(timezone_open('Somewhere/Someplace'));
$converted_time = $time_to_convert->format('Xin chào');
$this->set('field_converted_time', $converted_time);
Điều này hoạt động tốt để đăng ký cả qua trang web Drupal và ứng dụng web Ionic React của tôi (chủ yếu sử dụng JSON:API, nhưng sử dụng tài nguyên REST để đăng ký người dùng.
Sau đó tôi đã chuyển đoạn mã trên sang lưu chức năng công cộng ()
trong lớp gói thực thể người dùng của tôi.
Khi tôi làm như vậy, đăng ký người dùng trang web tiếp tục hoạt động tốt, nhưng đăng ký tách rời có lỗi sau:
TypeError: DateTime::__construct(): Đối số #2 ($timezone) phải thuộc loại ?DateTimeZone, bool được cung cấp trong DateTime->__construct().
Vấn đề là ở đó $this->getTimeZone()
không trả về giá trị trong trường hợp tách rời, nhưng tại sao? Tôi nghĩ rằng đăng ký qua REST sẽ giống hệt như khi đăng ký qua trang web-- giống như cách hook_user_presave()
được thực hiện theo cùng một cách.
Đây là YAML cho điểm cuối đăng ký người dùng của tôi:
uuid: đã biên tập lại
mã ngôn ngữ: en
trạng thái: đúng
phụ thuộc:
mô-đun:
- tuần tự hóa
- người dùng
id: user_registration
plugin_id: user_registration
độ chi tiết: tài nguyên
cấu hình:
phương pháp:
- BƯU KIỆN
định dạng:
- json
xác thực:
- bánh quy