在Laravel 5

在Laravel 5

问题描述:

我想闪反馈消息像闪烁的反馈信息“的条目已成功创建”“您没有足够的权限来访问此项目”在Laravel 5

我想避免嵌入这些消息直冲意见,因为他们可以重新出现,例如,当用户返回到他的浏览器中的前一页。

为了解决这个问题,我有一个JavaScript函数,其作用类似于以下

(showFlashMessage(){ 
    // 1. make an ajax request 
    // 2. retrieve a flash message (if any) 
    // 3. display the message 
})(); 

这种方式,闪光灯的消息再次出现的问题就解决了。但是,在请求发出时,闪光消息已经消失。我应该如何解决这个问题?

+0

Im相当肯定的AJAX算作拉存储该第二个请求,该Flash消息仅适用于第一个请求(即,当页面加载时)。 – Severian

+0

@Severian这就是我的想法。有没有办法解决这个问题?我想避免使用'会议::把()' –

+0

@Alexander Lomia:对于这一点,我会建议你使用甜警报。请选择这个:[https://github.com/uxweb/sweet-alert]。它比闪光消息更好。:) –

如果你想解决服务器端的问题您可以利用会话门面,像这样:

在你的控制器:

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 
     } 
    }); 
} 
+0

中的*问题与第一种方法*为,当被生成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

+0

同样,问题是当我尝试通过ajax调用来检索闪回的消息时,因为它被算作第二个请求,所以闪存消息不再存在。 –