CakePHP 3:无法向存储在会话中的对象添加属性


CakePHP 3: Can't add a property to an object stored in a session.

我通过以下方式将对象存储到会话中:

$this->request->session()->write('order', $order);

在另一个控制器中,我尝试向同一对象添加另一个属性:

$this->request->session()->write('order.client_id', $client->id);

但是由于某种原因,这会覆盖整个对象,我只剩下一个只有一个属性的对象,即新创建的client_id。

正确的方法是什么?

点用于表示嵌套数组。此表示法用于使用名称/键的所有会话组件方法。

-- 与会话数据交互

您确定您的$order变量是数组而不是对象吗?

如果$order是一个对象,你必须获取该对象,更改它,然后将其再次放入会话中。

$order = $this->request->session()->read('order');
$order->client_id = $client->id;
$this->request->session()->write('order', $order);

能够通过执行以下操作来解决此问题:

$order = $this->request->session()->read('order');
$order->client_id = $client->id;
$this->request->session()->write('order', $order);