我尝试使用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;
答案 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))
}