Laravel会话:页面重新加载(刷新)显示另一组图像

时间:2017-02-20 16:45:32

标签: php laravel session laravel-5

我想创建一个显示一组图像(横幅)的简单应用程序,当重新加载页面时,它应该显示另一组图像。

每个图像都有一个名为order的属性,它是一个整数。 例如,当您第一次打开主页时,应显示三个 [1,3,5] order值的图像。页面重新加载后,应显示 [2,4,6] order值的图像。如果您再次重新打开页面,则应再次显示 [1,3,5] order值的图片。等等...

因此,基本上, [1,3,5] [2,4,6] order值的图片应在每页上切换重装。

在我的控制器中,我尝试过以下操作:

public function index() {

    if (!\Session::has('top_order')) {
        $top_banners = TopBanner::where('position', 'top')
            ->whereIn('order', [1, 3, 5])
            ->orderBy('order')
            ->get();
        \Session::put('top_order', [2, 4, 6]);
    } else {
        $next_orders = \Session::get('top_order');

        $top_banners = TopBanner::where('position', 'top')
            ->whereIn('order', $next_orders)
            ->orderBy('order')
            ->get();

        if ($next_orders[0] == 1) {
            for ($i = 0; $i < count($next_orders); $i++) {
                $next_orders[$i]++;
            }
        } else {
            for ($i = 0; $i < count($next_orders); $i++) {
                $next_orders[$i]--;
            }
        }

        \Session::put('top_order', $next_orders);
    }

    return view('welcome')->with('top_banners', $top_banners);   
}

但由于某种原因,图像没有切换。正如您在else块中看到的那样,当重新加载页面时(发送HTTP请求并执行控制器中的index方法) - 首先我从'top_order'会话中获取下一组应该显示的图像:

$next_orders = \Session::get('top_order');

...然后我想更新'top_order'会话 - 我想将其值设置为其他订单组。因此,如果'top_order'会话的当前值为 [1,3,5] - 则将其更新为 [2,4,6] :< / p>

        if ($next_orders[0] == 1) {
            for ($i = 0; $i < count($next_orders); $i++) {
                $next_orders[$i]++;
            }
        }

...如果'top_order'会话的当前值为 [2,4,6] - 则将其更新为 [1,3,5] < /强>:

        else {
            for ($i = 0; $i < count($next_orders); $i++) {
                $next_orders[$i]--;
            }
        }

最后,保存:

\Session::put('top_order', $next_orders);

但它不起作用,我无法看到我做错了什么。 一旦'top_order'会话设置为 [2,4,6] - 它就会保留在那里,无论我刷新页面多少次,都只会显示该组图像。

1 个答案:

答案 0 :(得分:0)

public function index() {
$first_order = [1,3,5];
$second_order = [2,4,6];
if (!\Session::has('top_order')) {
    \Session::put('top_order', $first_order);
} else {
    \Session::put('top_order', (\Session::get('top_order') == $first_order) : $second_order ? $first_order));
}
    $top_banners = TopBanner::where('position', 'top')
        ->whereIn('order', \Session::get('top_order'))
        ->orderBy('order')
        ->get();

    return view('welcome')->with('top_banners', $top_banners);   
}

试试这段代码。如果它不起作用,我建议用cookie替换会话。