octobercms - OctoberCMS 更新会话值不起作用
问题描述
我正在使用 OctoberCMS 会话https://octobercms.com/docs/services/session它对我来说工作正常,但我有一个要求。
我试图通过首先找到一个会话数组 id 来更新我的会话值,然后从该会话的数组中更新一个值..但这对我不起作用..这就是我正在做的..
我的 HTML 文件
<a href="javascript:void(0)" data-request="{{ __SELF__ }}::onFramesSessionCreateOrUpdate" data-request-data="'productType':'1','productPlan':'2','productQty':'3'" data-request-update="cardlist: '#cardlist'">FrameS Add / Update Presenter</a>
我的 PHP 代码
public function onFramesSessionCreateOrUpdate(){
$productType = post('productType');
$productPlan = post('productPlan');
$productQty = post('productQty');
// First we are checking if this product plan is already exists or not
// If already exists, then we need to update the session, else we need to add as new session
if (\Session::has('addedToCart.frames'))
{
$sessionData = \Session::get('addedToCart.frames');
if(!empty($sessionData))
{
foreach (\Session::get('addedToCart.frames') as $key => $value)
{
if ($value['productPlan'] === $productPlan)
{
\Session::push('addedToCart.frames.'.$key . '.productQty.', $productQty);
break;
}
}
}
else{
$sessionId = \Str::random(9);
$array = array(
'id' => $sessionId,
'productType'=>$productType,
'productPlan' => $productPlan,
'productQty' => $productQty
);
\Session::push('addedToCart.frames' , $array);
}
}
else{
$sessionId = \Str::random(9);
$array = array(
'id' => $sessionId,
'productType'=>$productType,
'productPlan' => $productPlan,
'productQty' => $productQty
);
\Session::push('addedToCart.frames' , $array);
}
}
在我的 html 文件中,我onFramesSessionCreateOrUpdate
在单击时调用一个函数并传递我的参数productType
,productPlan
并且productQty
在内部onFramesSessionCreateOrUpdate
函数中,首先我要检查addedToCart.frames
的是一个if ($value['productPlan'] === $productPlan)
.
如果它发现我只想更新它的数量而不是删除会话..
\Session::push('addedToCart.frames.'.$key . '.productQty.', $productQty);
但是这段代码对我不起作用..
如果我print_r
遵循
echo '<pre>';
print_r($sessionData);
exit;
我的数组看起来像这样
Array
(
[0] => Array
(
[id] => SRgV5dJIC
[productType] => 1
[productPlan] => 2
[productQty] => Array
(
[] => Array
(
[0] => 3
[1] => 3
)
)
)
)
我也试过下面的代码
$productQty['productQty'] = $productQty;
\Session::push('addedToCart.frames.'.$key , $productQty);
但随后错误说legal string offset 'productQty'" on line 456 of D:\*\*\*\plugins\technobrave\loginplugin\components\LoginRegister.php
有人可以指导我如何更新会话..我不想使用删除此会话Session::forget('key');
..我只想通过id
我找到的更新会话值。
解决方案
您尝试push
再次进行会话,it is trying to add value in array
而不是updating existing value
.
您需要使用\Session::put()
方法来override/replace value
此代码将解决您的问题
\Session::put('addedToCart.frames.' . $key . '.productQty', $productQty);
如有任何疑问,请发表评论。
推荐阅读
- javascript - Vuejs + Firebase Storage 将多个图像上传到 Firebase Storage 并将所有 downloadURL 推送到 Firestore
- ios - 如何从 WKWebView 中获取选定的文本?
- jdbc - 从 AWS Glue 到 RDS 的 JDBC 连接超时
- php - 正则表达式 PHP 函数
- javascript - 为什么我可以在定义函数表达式之前调用它?
- javascript - 如何在基于类的组件中使用`useSelector`?反应,还原
- python - 如何使用 python 从 excel 工作表创建 pdf 报告?
- google-apps-script - 如何在谷歌表格中的单元格编辑上打印单元格范围?
- shell - 为什么卷曲 zip 文件需要 -L 作为命令行选项?
- python - Python Numpy:将数据从一维数组插入二维数组