aeviiq / storage-manager
存储管理组件
v6.1
2022-12-12 14:20 UTC
Requires
- php: ^8.1
- doctrine/common: ^3.4
- doctrine/persistence: ^2.1|^3.0
- myclabs/deep-copy: ^1.11
- symfony/http-foundation: ^6.0
Requires (Dev)
- phpstan/phpstan: ^1.8
- phpstan/phpstan-phpunit: ^1.1
- phpstan/phpstan-strict-rules: ^1.4
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.17.0
- thecodingmachine/phpstan-strict-rules: ^1.0
- vimeo/psalm: ^4.27
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 } }