簡體   English   中英

Laravel 5:要緩存還是使用會話來構建站點范圍的橫幅?

[英]Laravel 5: To cache or use sessions for building a site-wide banner?

我正在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的緩存等混淆嗎?

正如您所說,標語不會經常更改。 因此,對我來說,我將使用緩存來實現它。 由於我們僅需要一次使用即可將橫幅廣告緩存起來,因此可以提高性能。 對於其余部分,可以從Cache而不是Session中更快地進行檢索。

是否要更改代碼以更改給定頁面的標題? 我建議改為創建一個“頁面”包,在其中將每個頁面路線名稱輸入數據庫。

從那里,您的頁面服務提供商會獲得Page :: getModel()-> banner_text或類似的東西。 該方法將查找與當前路由名稱與db中的結果匹配的db結果。

當控制器方法被觸發時,您只需調用Page :: getBannerText()

該方法將提取當前路由名稱,提取與該頁面相關的頁面結果(如果存在)或創建它(如果不存在)(獲取所有內容的簡便方法)。 您將數據庫查詢結果緩存了X個小時,幾天或任何時間,因此無論何時有人打來電話,您甚至都不需要在客戶端上處理任何存儲。

這使您可以從數據庫fascet修改值。 它是更“正確”的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM