【问题标题】:Laravel Sessions: on page reload (refresh) display the other group of imagesLaravel Sessions:在页面重新加载(刷新)时显示另一组图像
【发布时间】:2017-02-20 16:45:31
【问题描述】:

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

每个图像都有一个名为order 的属性,它是一个整数。 例如,第一次打开首页时,应该显示三张图片,order 值在 [1, 3, 5] 中。页面重新加载后,应显示 [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]

        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] - 它会一直停留在那里,无论我刷新页面多少次,都只会显示该组图像。

【问题讨论】:

  • 你可以清理很多代码

标签: php laravel session laravel-5


【解决方案1】:
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 替换会话。

【讨论】:

  • put 方法需要两个参数:会话密钥会话值 (put('key', 'value')) laravel.com/docs/5.2/session。所以你的 else 块将不起作用,因为你有\Session::put('top_order') = ( ...
  • 抱歉,我回答的时候比较着急。我现在对其进行了编辑,这应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2015-01-27
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多