我正在將一項功能構建到Laravel 5應用程序中,該功能將允許您設置將在頁面頂部顯示的狀態橫幅內容。我們將使用此橫幅顯示特定於頁面的內容(狀態消息等)和站點範圍內的公告(每個用戶看到相同的內容,橫幅廣告一段時間保持不變)。Laravel 5:要緩存或使用會話來構建網站範圍的橫幅?
現在,我已經使用Laravel會話允許添加的橫幅實現通過調用任何控制器或中間件一個輔助方法:
// Call set_banner from in a controller or middleware (for persistent banners)
function set_banner($banner_text, $banner_class, $banner_persistant=false, $replace=false)
{
$banners = session()->get('banners', []);
// Create new banner
$banner = [
'text' => $banner_text,
'type' => $banner_class,
'persistent' => $banner_persistant
];
// Only put banner in array if it's not already there
if(!in_array($banner, $banners)) {
// Either override existing banners, or add to queue
if(!$replace) session()->push('banners', $banner);
else session()->put('banners', [$banner]);
}
}
// Called by default in the master.blade.php template
function get_banners()
{
$banners = session()->pull('banners', Array());
foreach($banners as $banner) {
// Print out each banner
print '<div class="col-md-12"><div class="text-center alert alert-block alert-'.$banner['type'].'">';
print $banner['text'];
print '</div></div>';
// Push back into the session if banner is marked as persistent
if ($banner['persistent']) session()->push('banners', $banner);
}
}
橫幅在控制器或中間件這樣創建的:
set_banner("<b>Note:</b> This is a sample persistant-scope banner set in a controller", "success", true);
有沒有更好的方式來完成這兩個存儲頁面級別和站點範圍內的標語?我擔心的是,在每個頁面上加載會話可能效率不高,特別是對於長時間不會改變的橫幅。這種方法會混淆Laravel的緩存等嗎?