Рейтинг:0

Drupal::messenger() не работает в функции выключения

флаг sa

Некоторое время мне нужно использовать функцию выключения. Вот глупый пример:

...
drupal_register_shutdown_function('display_message');
...

функция display_message() {
  Drupal::messenger()->addMessage('Привет, мир');
}

Можно ли вывести это сообщение на данный момент, оно не работает (даже при следующем обновлении страницы)?

По просьбе я объясню, почему мне нужно использовать функцию выключения.

Мой вариант использования:

Мы находимся в крюке presave узел А который только что получил новый пользовательский статус (который необходимо сохранить), скажем, статус 5.

Когда этот тип узла достигает статуса 5, мне нужно сохранить/обновить другой узел Б который содержит ссылку на узел A.

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

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

Вы можете возразить, что в хуке presave узел А, я могу вызвать функцию со статусом и узел А как параметр, который будет выполнять работу; но есть много обменов / ссылок, подобных этому, и, чтобы избежать спагетти-кода, я поместил весь код своей бизнес-модели в функции предварительного сохранения этих двух типов узлов.

Рейтинг:2
флаг cn

Это как-то бессмысленно. Вы не можете отобразить сообщение, страница уже отрисована. И вы не можете передать сообщение на следующее обновление страницы без сеанса. Если бы сеанс существовал, он был бы уже закрыт. Если бы сеанса не было, вы не могли бы открыть его сейчас и отправить файл cookie сеанса после того, как ответ уже завершен.

Baud avatar
флаг sa
Это первый раз, когда я использую эту функцию (например, чтобы сохранить узел после завершения всех транзакций БД). То, что вы говорите, выглядит умно. Знаете ли вы другой способ запустить некоторый код непосредственно перед началом рендеринга, но после окончания транзакций БД?
флаг cn
@Baud Похоже, вы, возможно, страдаете синдромом проблемы XY - на вашем месте я бы сделал шаг назад и попытался объяснить, какова ваша конечная цель, почему вы считаете, что вам нужно добавить это сообщение в определенный момент в жизненный цикл страницы, а не позволить ему следовать нормальному течению и тому подобное. В противном случае вы, вероятно, получите только такие ответы, и, хотя они точны и полезны, они не решат вашу проблему, потому что проблема не полностью понята.
Baud avatar
флаг sa
@Clive Я обновил свой вопрос ... Я не уверен, что он достаточно ясен.

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

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