在Laravel 5
我想闪反馈消息像闪烁的反馈信息“的条目已成功创建”或“您没有足够的权限来访问此项目”。在Laravel 5
我想避免嵌入这些消息直冲意见,因为他们可以重新出现,例如,当用户返回到他的浏览器中的前一页。
为了解决这个问题,我有一个JavaScript函数,其作用类似于以下:
(showFlashMessage(){
// 1. make an ajax request
// 2. retrieve a flash message (if any)
// 3. display the message
})();
这种方式,闪光灯的消息再次出现的问题就解决了。但是,在请求发出时,闪光消息已经消失。我应该如何解决这个问题?
如果你想解决服务器端的问题您可以利用会话门面,像这样:
在你的控制器:
function create() {
if(Gate::allows('createAccess')) {
Session::flash('error', 'You don't have enough permissions to access this item!');
return redirect()->back();
}
// Create the model or perform any other logic
Session::flash('success', 'An entity has been created successfully!');
return view('entities.show');
}
然后你就可以有一个局部命名message.blade.php它包含在您的entities.show视图中:
@if (Session::has('message'))
<div class="alert alert-info">
<p>{{ Session::get('message') }}</p>
</div>
@endif
如果您想解决客户端问题您可以在成功回调调用你的消息功能(例如甜警报消息)当请求已成功完成:
function showMessage() {
$.ajax({
url: 'your-url',
data: {
// Your data here
},
success: function() {
// Show success message
},
error: function() {
// Show error message
}
});
}
中的*问题与第一种方法*为,当被生成html,被生成的消息和为“绑定”到该HTML。因此,当用户导航回闪存视图时,它将始终显示闪光消息。 *第二种方法*的问题是,当ajax调用到达动作时,它被视为第二个请求,所以清除* Session :: flash存储*。 –
我会建议保持简单和调用内置flash()
方法在你的控制器:
flash()->error('We encountered an error whilst doing something');
return redirect('path') //action(), back(), etc;
按照我的理解,Laravel处理会话这些闪光的消息,他们坚持只为被删除之前的下一个页面视图。如果你想重新使用特定的信息或信息类型和内容的结合,考虑在任何一个数据库表或helper.php
另一种选择是在Laracasts/Flash/Flash
包
同样,问题是当我尝试通过ajax调用来检索闪回的消息时,因为它被算作第二个请求,所以闪存消息不再存在。 –
Im相当肯定的AJAX算作拉存储该第二个请求,该Flash消息仅适用于第一个请求(即,当页面加载时)。 – Severian
@Severian这就是我的想法。有没有办法解决这个问题?我想避免使用'会议::把()' –
@Alexander Lomia:对于这一点,我会建议你使用甜警报。请选择这个:[https://github.com/uxweb/sweet-alert]。它比闪光消息更好。:) –