在serviceprovider中的Laravel cookie无法比拟

时间:2015-10-19 11:06:44

标签: laravel cookies laravel-5 laravel-5.1

我尝试使用serviceproviders recommmended here将我的compose函数中基于cookie值的变量传递给我构建菜单的所有视图:

  

文件:Providers / ViewComposerServiceProvicer.php

public function boot(Request $request) { $this->composeTopBar($request);}

public function composeTopBar(Request $request)
{
     $cookieValue = $request->cookie('brand');
    // if value not set use default value.
    if($cookieValue == null)
    {
        $cookieValue = 1;
    }
    $brands = \App\Brand::orderBy('priority', 'asc')->get();
    foreach($brands as $brand){
        if($brand->id == $cookieValue){
            $brand->menuActive = true;
        }
        else{
            // show value to debug
            $brand->menuActive = $cookieValue;
        }
    }


    view()->composer('front.layouts.top', function ($view) use ($brands) {
        $view->with('brandItems',$brands );
    });
}

cookieValue看起来像

yJpdiI6IlNJODBvQ1RNM004OWVleyJpdiI6IlNJODBvQ1RNM004OWVleyJpdiI6IlNJODBvQ1RNM004OWVl

虽然我的控制器中的值看起来像2'如何在我的撰写函数中获得原始值2

我需要获取原始值以在composeTopBar函数中进行比较,因此如果它等于cookie值,我可以将变量传递给它。

设置Cookie的方法

    $response = response()-> view('front.products.category', compact('products','category'));
    $response->withCookie(cookie()->forever('brand',1));
    return $response;

2 个答案:

答案 0 :(得分:1)

我最终使用class based composer。 之所以能够这样做是因为它在laravel的生命周期中稍后调用,并且Cookie变量被解密。使用基于Closure的作曲家时,值会被加密。

答案 1 :(得分:0)

试试这个:将response()调用作为参数添加到$response = response(view('front.products.category', compact('products','category'))); $response->withCookie(cookie()->forever('brand', 1)); return $response;

var indexPathsToReload = [NSIndexPath]()
for var i in 0..<Data.NearByList.count {
    indexPathsToReload.append(NSIndexPath(forItem: i, inSection: 0))
}