我想快速反馈消息,例如“条目已成功创建”或“您没有足够的权限来访问此项目”。
我希望避免将这些消息直接嵌入到视图中,因为它们可以重新显示,例如,当用户使用浏览器导航回上一页时。
要解决这个问题,我有一个 javascript函数,其行为如下:
(showFlashMessage(){
// 1. make an ajax request
// 2. retrieve a flash message (if any)
// 3. display the message
})();
这样,解决了闪存消息再现的问题。但是,在发出请求时,flash消息已经消失。我该如何解决这个问题?
答案 0 :(得分:0)
如果您想在服务器端解决问题,您可以像这样使用会话外观:
在您的控制器中:
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
}
});
}
答案 1 :(得分:0)
我建议保持简单,并在控制器中调用内置的flash()
方法:
flash()->error('We encountered an error whilst doing something');
return redirect('path') //action(), back(), etc;
根据我的理解,Laravel会在会话中处理这些Flash消息,并且在删除之前它们仅保留用于下一页面视图。如果要重用特定消息或消息类型和内容的组合,请考虑将其存储在数据库表或helper.php
另一个选择是拉入Laracasts/Flash/Flash
包