我有一个控制器,可以在会话中添加大学课程的名称:
// 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
。
答案 0 :(得分:2)
根据建议,我使用了thread中的unset
和array_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::pull
。 Session::pull(a,b)
从会话中提取a
并将其从会话中删除。如果在会话中找不到a
,则会返回b
作为默认值。请注意,b
是可选的。
要替换class
值,您只需使用
Session::put('class', $data['class']);
这将覆盖会话中的旧class
值。
修改强>
我建议您将会话密钥class
重命名为classes
,因为此密钥可能包含多个类。
我还建议使用key =>数组中的值对,而不是仅使用值和隐式键。这将允许您轻松地从classes数组中删除一个类,并使用put
方法将新的classes数组存储在会话中。它还可以使后端和数据库中的选定类更容易使用。