aeviiq/storage-manager

存储管理组件

v6.1 2022-12-12 14:20 UTC

This package is auto-updated.

Last update: 2024-09-12 17:45:33 UTC


README

原因

提供一种简单的方式存储与Doctrine实体相关联的数据,而不存储实体或其代理本身。对原始对象进行深度复制,其中任何实体都会被分离,并且其标识符将与它们一起存储。这些标识符将用于在加载()时检索管理的实体。

对象以副本的形式保存,这意味着引用变化不会影响存储的对象。要持久化任何更改,请保存()对象。请参见下面的示例。

对只读属性的支持

为了复制对象,StorageManager使用MyClabs的DeepCopy组件。该组件目前还不支持PHP 8.1中新引入的只读属性

它们有一个开放问题来支持这一点。

安装

composer require aeviiq/storage-manager

使用方法

final class Foo
{
    public function __construct(private readonly StorageManagerInterface $storageManager)
    {
    }
    
    public function __invoke(): void
    {
        $object = new stdClass();
        $object->foo = 'foo';
        
        $this->storageManager->save('some_key', $object);
        // These changes are made after the save() call and will not be there upon load().
        $object->foo = 'bar';
        
        $loadedObject = $this->storageManager->load('some_key');
        
        $object === $loadedObject; // false
        $loadedObject->foo === 'bar' // false
    }
}