Điểm:1

Tại sao tôi nhận được các kết quả khác nhau cho thực thể::save() giữa REST và web?

lá cờ cn

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
lá cờ my
Bạn đã đặt xdebug trên cái này hay bạn đã xác minh qua Storm/IDE rằng tất cả các loại đều đúng? `$this` sẽ xuất hiện dưới dạng loại nào? Tôi nghĩ rằng bạn có một trong hai vấn đề. (1) Người dùng so với đối tượng Tài khoản hoặc (2) Sự cố chuỗi so với DateTimeZone. Tôi sử dụng nhầm máy tính, nhưng tôi không nghĩ bạn cần gọi `timezone_open ` rõ ràng. Tôi nghĩ rằng các đối tượng `DateTimeZone` thích hợp luôn được chuyển trong API.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.