在Drupal 7中
if ($_SESSION['messages']['status'][0] == t('Registration successful. You are now logged in.')) {
unset($_SESSION['messages']['status']);
}
如何在drupal 8中实现这一目标? 请帮忙
答案 0 :(得分:10)
首先,在Drupal 8中,消息存储在与以前相同的$_SESSION['messages']
变量中。但是,直接使用它并不是一个好方法,因为存在drupal_set_message
和drupal_get_messages
函数,您可以自由使用它们。
然后,使用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.
}
然而,与Drupal 7的主要区别在于,现在状态消息并不总是字符串,它们可能是Markup
类的对象。它们是字符串的包装器,可以使用魔术方法__toString
强制转换为底层 string
。这意味着它们可以与字符串进行比较:
function mymodule_preprocess_status_messages(&$variables) {
if(isset($variables['message_list']['status'])){
$status_messages = $variables['message_list']['status'];
foreach($status_messages as $delta => $message) {
if ($message instanceof \Drupal\Component\Render\MarkupInterface) {
if ((string) $message == (string) t("Searched text")) {
unset($status_messages[$delta]);
break;
}
}
}
}
}
答案 1 :(得分:0)
在阅读the related change record时,我发现了\Drupal::messenger()->deleteAll()
。我希望这对某人有用。更新:您不应该这样做,因为它也会删除所有后续消息。相反,请执行unset(['_symfony_flashes']['status'][0])
。
答案 2 :(得分:-3)
您可以通过多种方式解决问题。
第一种方式:
您可以对核心用户模块进行微小更改。 继续:
\core\modules\user\src\RegisterForm.php
在该文件中,您可以更改行:
drupal_set_message($this->t('Registration successful. You are now logged in.'));
注意:这是最简单的方法,但在这种情况下,您将编辑Drupal核心模块,这通常是不好的做法。在进一步开发中,您可能会遇到诸如更新时覆盖更改等问题。
第二种方式:
您可以使用模块禁用最终用户消息。 Disable message模块可以提供您需要的选项。在模块配置中,您可以使用文本框过滤掉显示给最终用户的消息。
第三种方式:
Drupal 8中的消息存储在会话变量中,并通过$ messages主题变量显示在页面模板中。如果要在调用之前修改传递给模板的变量,则应使用预处理功能。在这种情况下,您可以在会话变量中搜索字符串,并在显示之前提醒/删除它。
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]);
}
}
}
}
}
(注意:未经测试的代码,谨防拼写错误)
希望这有帮助!