从Laravel

时间:2015-08-06 03:52:05

标签: php session laravel

我有一个控制器,可以在会话中添加大学课程的名称:

    // Get all requests
    $data = $request->all();

    .. input validation here ..

    // Push the class to the session
    Session::push('class', $data['class']);

这会生成一个很好用的数组:

["ECEC 301 Advanced Programming for Engineers Lab","ECEC 301 Advanced Programming for Engineers Lecture"]

我也有这个代码检查这样的重复:

    // Ensures no duplicate entries in the session
    if(Session::has('class')) {
        foreach(Session::get('class') as $class) {
            if($data['class'] === $class) {
                return Response::json(array(
                        'success' => false,
                        'code' => 0,
                        'message' => $data['class'] . ' already in the cart'
                    )
                );
            }
        }
    }

我的问题是 - 如何从会话中删除特定的类?

这就是我所拥有的:

    // Remove the item [if exists]
    if(Session::has('class')) {
        foreach(Session::get('class') as $class) {
            if($data['class'] === $class) {
                Session::pull('class', $data['class']);
                return Response::json(array(
                        'success' => true,
                        'code' => 1,
                        'message' => $data['class'] . ' removed from cart'
                    )
                );
            }
        }
    }

但是,这似乎会从购物车中删除所有,而不仅仅是ECEC 301 Advanced Programming for Engineers Lab

2 个答案:

答案 0 :(得分:2)

根据建议,我使用了thread中的unsetarray_values

    // Remove the item [if exists]
    if(Session::has('class')) {
        $classes = Session::get('class');
        foreach($classes as $index => $class) {
            if($data['class'] === $class) {
                unset($classes[$index]);
                $newClass = array_values($classes);
                Session::put('class', $newClass);
                return Response::json(array(
                        'success' => true,
                        'code' => 1,
                        'class' => $classes,
                        'message' => $data['class'] . ' removed from cart'
                    )
                );
            }
        }
    }

答案 1 :(得分:1)

您正以错误的方式使用Session::pullSession::pull(a,b)从会话中提取a并将其从会话中删除。如果在会话中找不到a,则会返回b作为默认值。请注意,b是可选的。

要替换class值,您只需使用

即可
Session::put('class', $data['class']);

这将覆盖会话中的旧class值。

修改

我建议您将会话密钥class重命名为classes,因为此密钥可能包含多个类。

我还建议使用key =>数组中的值对,而不是仅使用值和隐式键。这将允许您轻松地从classes数组中删除一个类,并使用put方法将新的classes数组存储在会话中。它还可以使后端和数据库中的选定类更容易使用。