首页 > 解决方案 > 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在单击时调用一个函数并传递我的参数productTypeproductPlan并且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我找到的更新会话值。

标签: octobercms

解决方案


您尝试push再次进行会话,it is trying to add value in array而不是updating existing value.

您需要使用\Session::put()方法来override/replace value

此代码将解决您的问题

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

如有任何疑问,请发表评论。


推荐阅读