根据cookie值更改Laravel路线

时间:2017-06-23 20:17:44

标签: javascript php laravel cookies

在我的网站上,我有一个导航栏。以下是其中的一个示例/部分:

<li><a class="tier1Nav2" id="tier1Nav2Item1" href="{{ route('browse.results', ['query=graphic','orderBy=date']) }}">Graphic Design</a>
    <ul class="dropDownNav" id="dropDownNav1">
        <div class="rightSideDrop"><div id="dropImg1" class="dropImg">{!! Html::image('images/nav/placeholder.png'); !!}</div></div>
        <li class="ddNavItem"><a id="ddNav1Item1" href="{{ route('browse.results', ['query=interface','orderBy=date']) }}">Interface Design</a></li>
        <li class="ddNavItem"><a id="ddNav1Item2" href="{{ route('browse.results', ['query=web','orderBy=date']) }}">Web Layouts</a></li>
        <li class="ddNavItem"><a id="ddNav1Item3" href="{{ route('browse.results', ['query=illustration','orderBy=date']) }}">Illustrations</a></li>
        <li class="ddNavItem"><a id="ddNav1Item4" href="{{ route('browse.results', ['query=brush','orderBy=date']) }}">Brushes</a></li>
        <li class="ddNavItem"><a id="ddNav1Item5" href="{{ route('browse.results', ['query=typography','orderBy=date']) }}">Typography</a></li>
        <li class="ddNavItem"><a id="ddNav1Item6" href="{{ route('browse.results', ['query=identity','orderBy=date']) }}">Identity & Branding</a></li>
        <li class="ddNavItem"><a id="ddNav1Item7" href="{{ route('browse.results', ['query=vector','orderBy=date']) }}">Vector Art</a></li>
    </ul> 
</li>

这些链接将路由到控制器BrowseController.php

但是,有一个类似的控制器,FullViewBrowseController.php

当用户在浏览页面上时,他可以切换到该页面的fullview版本。这也将设置一个cookie(反之亦然)。

$(document).on('click','.wall-of-thumbs-link', function(){
    setCookie("commendme_browse_view", "thumb_view", 365);
}); 

$(document).on('click','.full-view-link', function(){
    setCookie("commendme_browse_view", "full_view", 365);
}); 

我希望这个导航栏的链接根据此cookie的值路由到不同的控制器。换句话说,默认情况下,我希望链接显示常规浏览控制器,以及cookie是否设置为"thumb_view"。像之前一样,例如:

<li class="ddNavItem"><a id="ddNav1Item1" href="{{ route('browse.results', ['query=interface','orderBy=date']) }}">Interface Design</a></li>

但是,如果Cookie设置为"fullview_view",我希望这些链接通过FullViewBrowseController.php进行路由,如下所示:

<li class="ddNavItem"><a id="ddNav1Item1" href="{{ route('browse.fullview.results', ['query=interface','orderBy=date']) }}">Interface Design</a></li>

导航栏中总共有大约24个链接,所以我不确定哪种解决方案最好。

一个选项是拥有2个导航栏,一个带有全景视图链接,另一个带有常规链接,两者都是隐藏的,并使用.show()根据cookie的值取消隐藏相应的导航栏。但我觉得这不是很优雅。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

根据您的问题,您希望根据Cookie值显示不同的路线。这是快速解决方案。

@if(isset($_COOKIE['commendme_browse_view']) and $_COOKIE['commendme_browse_view'] == 'full_view')
    <li class="ddNavItem"><a id="ddNav1Item1" href="{{ route('browse.fullview.results', ['query=interface','orderBy=date']) }}">Interface Design</a></li>
    // More Links
@else
    <li class="ddNavItem"><a id="ddNav1Item1" href="{{ route('browse.results', ['query=interface','orderBy=date']) }}">Interface Design</a></li>
    // More Links
@endif

此代码默认显示thumb_view,如果用户已选择full_view,则会显示完整视图。

让我知道它是否有效!

更新:使用此方法的唯一缺点是,如果要从Navbar中删除某些链接,则必须从这两个部分中删除它们。编辑链接也是如此。