2016-09-15 132 views
0

我想閃反饋消息像閃爍的反饋信息「的條目已成功創建」「您沒有足夠的權限來訪問此項目」在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]。它比閃光消息更好。:) –

回答

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

中的*問題與第一種方法*爲,當被生成html,被生成的消息和爲「綁定」到該HTML。因此,當用戶導航回閃存視圖時,它將始終顯示閃光消息。 *第二種方法*的問題是,當ajax調用到達動作時,它被視爲第二個請求,所以清除* Session :: flash存儲*。 –

0

我會建議保持簡單和調用內置flash()方法在你的控制器:

flash()->error('We encountered an error whilst doing something'); 
return redirect('path') //action(), back(), etc; 

按照我的理解,Laravel處理會話這些閃光的消息,他們堅持只爲被刪除之前的下一個頁面視圖。如果你想重新使用特定的信息或信息類型和內容的結合,考慮在任何一個數據庫表或helper.php

另一種選擇是在Laracasts/Flash/Flash

+0

同樣,問題是當我嘗試通過ajax調用來檢索閃回的消息時,因爲它被算作第二個請求,所以閃存消息不再存在。 –