Рейтинг:1

Почему я получаю разные результаты для entity::save() между 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->format('Привет');

$this->set('field_converted_time', $converted_time);

Это отлично работало для регистрации как через веб-сайт Drupal, так и через мое веб-приложение Ionic React (которое в основном использует JSON: API, но использует ресурс REST для регистрации пользователей.

Затем я переместил приведенный выше код в публичная функция save() в моем классе пакетов пользовательских объектов.

Когда я это сделал, регистрация пользователя на веб-сайте продолжает работать нормально, но при разделенной регистрации возникает следующая ошибка:

TypeError: DateTime::__construct(): Аргумент №2 ($timezone) должен иметь тип ?DateTimeZone, bool, заданный в DateTime->__construct().

Проблема в том, что $this->getTimeZone() не возвращает значение в несвязанном сценарии, но почему? Я думал, что регистрация через REST будет точно такой же, как и при регистрации через веб-сайт — примерно так, как hook_user_presave() выполняется так же.

Вот YAML для моей конечной точки регистрации пользователя:

UUID: отредактировано
код языка: en
статус: правда
зависимости:
  модуль:
    - сериализация
    - пользователь
идентификатор: user_registration
plugin_id: user_registration
гранулярность: ресурс
конфигурация:
  методы:
    - ПУБЛИКОВАТЬ
  форматы:
    - json
  аутентификация:
    - печенье
флаг my
Вы поставили xdebug на это или вы проверили через Storm / IDE, что все типы верны? Какого типа `$this`? Я думаю, что у вас одна из двух проблем. (1) объект User vs Account или (2) проблема String vs DateTimeZone. Я нахожусь не на том компьютере, но я не думаю, что вам нужны явные вызовы `timezone_open`. Я думаю, что правильные объекты `DateTimeZone` всегда передаются в API.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.