Удалить сообщение по умолчанию в drupal 8
В Drupal 7
if ($_SESSION['messages']['status'][0] == t('Registration successful. You are now logged in.')) {
unset($_SESSION['messages']['status']);
}
Как я могу достичь этого в drupal 8? Пожалуйста помочь
Ответы - Удалить сообщение по умолчанию в drupal 8 / Remove default message in drupal 8

05.08.2016 10:03:41
Вы можете решить свою проблему более чем одним способом.
Первый способ:
Вы можете внести незначительные изменения в основной пользовательский модуль. Продолжать:
\core\modules\user\src\RegisterForm.php
В этом файле у вас есть строка, которую вы можете изменить:
drupal_set_message($this->t('Registration successful. You are now logged in.'));
Примечание: это самый простой способ, но в этом случае вы будете редактировать основной модуль Drupal, и это, как правило, плохая практика. В дальнейшем развитии у вас могут возникнуть проблемы, такие как перезапись изменений при обновлении.
Второй метод:
Вы можете отключить сообщение конечного пользователя с помощью модуля. Отключить модуль сообщений есть опция, которая вам нужна. В конфигурации модуля у вас есть текстовое поле, где вы можете отфильтровать сообщения, показанные конечным пользователям.
Третий путь:
Сообщения в Drupal 8 хранятся в переменной сеанса и отображаются в шаблоне страницы с помощью переменной темы $messages. Если вы хотите изменить переменные, которые передаются в шаблон перед его вызовом, вы должны использовать функцию preprocess. В вашем случае здесь вы можете просто найти строку в переменной сеанса и предупредить / удалить ее до ее отображения.
function yourmodule_preprocess_status_messages(&$variables) {
$message = 'Registration successful. You are now logged in.';
if (isset($_SESSION['messages'])) {
foreach ($_SESSION['messages'] as $type => $messages) {
if ($type == 'status') {
$key = array_search($message, $messages);
if ($key !== FALSE) {
unset($_SESSION['messages'][$type][$key]);
}
}
}
}
}
(Примечание:непроверенный код, остерегайтесь опечаток)
Надеюсь, это поможет!


05.08.2016 11:46:14
Прежде всего, в Drupal 8 сообщения хранятся в той же $_SESSION['messages']
, что и раньше. Однако использование его напрямую не является хорошим способом, так как существуют drupal_set_message
и drupal_get_messages
, которые вы можете свободно использовать.
Затем сообщения о состоянии отображаются с помощью Основное отличие Drupal 7, однако, заключается в том, что теперь сообщения о состоянии не всегда являются строками, они могут быть объектами status-messages
function mymodule_preprocess_status_messages(&$variables) {
$status_messages = $variables['message_list']['status'];
// Search for your message in $status_messages array and remove it.
}
с помощью магического метода Markup
. Это означает, что их можно сравнивать со строками и как строки:string




04.10.2019 12:33:13
Прочитав соответствующую запись изменений, я обнаружил \Drupal::messenger()->deleteAll()
. Надеюсь, это кому-то пригодится. Обновление: вы не должны этого делать, так как он удаляет все последующие сообщения, а также. Вместо этого сделайте unset(['_symfony_flashes']['status'][0])
.