2017-09-16 32 views
0

不知何故,以查看,我只管理它得到它的工作(傳遞的數據,從控制器陣列查看)使用Laravel傳遞來自控制器的數據使用會話

return redirect('whatever')->with('arrayName', $arrayName); 

視圖內經由

訪問它
@if(!is_null(session('arrayName'))) 
     <div class="alert alert-{{ session('arrayName')['something'] }} alert-dismissable"> 
     // more code goes here   
    @endif 

現在,這似乎是一個會話,我使用這種技術,以傳遞信息的表格數據(如成功創建XY,刪除,...等)(使用相同的消息數組的名稱),現在又一次發生的情況是,信息正在頁面上顯示它不應該是(因爲上面的HTML在每個HTML /刀片頁面內部,以便始終有機會顯示消息/警報),因爲它仍然存儲在會話中。所以它不僅顯示了一條舊信息,甚至是我在應用程序內部的其他位置使用的信息。

我想知道是否session()調用是錯誤的,或者我需要刷新會話(如果是這樣,如何以及何時?),或者如果我只是弄亂控制器和視圖之間的通信,因爲我看到(同樣是here),人們在視圖內訪問它時使用唯一的變量名稱,而不是session()。那麼這是否與舊的Laravel版本(我正在使用最新的版本)有關,也可能只是當時的工作或者我錯過的東西?

感謝您的建議。

+0

你爲什麼不使用$請求 - >會話() - >閃存( 'arrayName中的', '任務成功了!'); ... – Serge

+0

@Serge如何沿着函數'這種打法'重定向() - >與()'我前面用?請詳細說明這一點。 – John

回答

0

我猜你所遇到的數據是你使用session()->put('key', 'value)session(['key' => 'value'])手動存儲在會話中的數據。當你將數據存入會話中時,它會一直保持在那裏,直到會話過期或手動遺忘爲止。

但是,如果你只希望數據堅持圍繞一個響應並立即之後自行刪除,你可以使用flash()方法。這就是redirect()->with()功能的工作原理。您在with()中指定的數據會「閃」到會話中,以便它只持續一個響應。

所以,你可以改變你的代碼爲「閃光」的數據會話時只需要它的一個響應,否則你將需要更新您的刀片模板手動forget()後您的數據顯示它:

@if(!is_null(session('arrayName'))) 
    <div class="alert alert-{{ session('arrayName')['something'] }} alert-dismissable"> 

    // more code goes here 

    @php 
     session()->forget('arrayName') 
    @endphp 
@endif 
+0

謝謝你的回覆。我沒有,因爲我在後指出,使用'會話() - > put'但只'重定向() - >與()',這就是爲什麼我不知道這麼嚴重。還有一點,它只是說「成功添加XY」(雖然它不屬於那裏)作爲消息。 – John

相關問題