📅  最后修改于: 2023-12-03 15:22:18.766000             🧑  作者: Mango
在Laravel中,使用会话闪存可以轻松将消息从一个请求传递到另一个请求。这对于在表单提交后显示成功或错误消息非常有用。但是,有时候我们只想在当前请求中显示闪存消息,而不是在下一个请求中显示。对于这种情况,我们可以使用JavaScript来实现。
我们可以使用Laravel的with
方法将闪存消息放入会话中。例如,以下代码将success
消息闪存到会话中:
return redirect()->route('home')->with('success', '操作成功!');
我们需要创建一个showFlashMessage
函数来在当前请求中显示闪存消息。该函数应该在请求的HTML文档中的JavaScript部分中定义。
function showFlashMessage() {
const flashMessage = document.getElementById('flash-message');
if (flashMessage) {
const message = flashMessage.dataset.message;
const type = flashMessage.dataset.type;
const alertClass = type === 'success' ? 'alert-success' : 'alert-danger';
const messageHtml = `<div class="alert ${alertClass}">${message}</div>`;
flashMessage.insertAdjacentHTML('afterend', messageHtml);
flashMessage.remove();
}
}
该函数首先查找具有id
为flash-message
的HTML元素。如果没有找到这样的元素,则函数将不执行任何操作。否则,函数将从该元素的data-message
和data-type
属性中获取消息的文本和类型。然后,根据消息的类型,函数将创建一个相应的警报类名。接下来,函数将在flash-message
元素的后面插入一个新的HTML元素,其中包含警报类名和消息文本。最后,函数将删除原始的flash-message
元素。
为了让showFlashMessage
函数起作用,我们需要将它作为JavaScript脚本添加到请求的HTML文档。例如,在Laravel中,我们可以通过将以下内容添加到app.blade.php
(或其他适当的布局文件)来实现此目的:
<body onload="showFlashMessage()">
@if (session()->has('success') || session()->has('error'))
<div id="flash-message" data-message="{{ session()->get('success', session()->get('error')) }}" data-type="{{ session()->has('success') ? 'success' : 'error' }}"></div>
@endif
<!-- 页面内容 -->
</body>
该脚本将在文档加载完成时自动调用,并显示闪存消息(如果有)。flash-message
元素的文本内容和类别将从会话中获取。
通过使用JavaScript来实现只在当前请求中显示闪存消息,我们可以避免将这些消息显示在后续请求中。上述步骤简洁易懂,代码可读性高,可以为开发者提供一种简便的在Laravel中如何使用JavaScript实现闪存消息的方法。