OctoberCMS 更新会话值不起作用

OctoberCMS update session value not working

我正在使用 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 并传递我的参数 productTypeproductPlanproductQty 以及内部 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

This code will solve your issue

\Session::put('addedToCart.frames.' . $key . '.productQty', $productQty);

如有疑问请评论。