bernard / normalt
Normalt 是一个扩展到 Symfony Serializer 的库,它仅实现规范化部分
Requires
- php: ^5.6||^7.0
- symfony/serializer: ^2.3 || ^3.0 || ^4.0
Requires (Dev)
- doctrine/common: ^2.1
- phpspec/phpspec: ^2.5
This package is not auto-updated.
Last update: 2024-09-14 14:40:04 UTC
README
Normalt 包含了与 Symfony 中的序列化组件一起使用的额外规范化器。它还实现了一个规范化代理,该代理将检查您想要规范化或反规范化的数据,并调用支持它的规范化器。
在 Normalt 的上下文中,规范化是将对象转换为数组的操作。反规范化是相反的方向(将数组转换为对象)。据我所知,这与 Symfony 序列化器使用的概念相同。
目录
入门
入门只需使用 Composer 需求库即可。
$ composer require bernard/normalt
规范化器
这些规范化器可以直接与序列化组件一起使用,也可以通过 AggregateNormalizer
使用。
AggregateNormalizer
AggregateNormalizer
是一个代理和聚合器,因为它聚合了多个规范化器和反规范化器,并将处理过程委托给它们。
它有一份规范化器和反规范化器的列表。它会询问这些列表中的每一个是否支持数据/对象,并使用找到的第一个。
它实现了完整序列化器的一部分,并且其唯一关注点是规范化到数组以及将数组反规范化为对象。这使得您可以专注于规范化,而不是将数据转换为特定格式,如 xml
、json
等。
用法
您需要实例化规范化器以及您想要使用的规范化器/反规范化器列表。在这个例子中,我们使用 GetSetMethodNormalizer
,这是 symfony 包中分发的一个。
这是我们将要使用的类。GetSetMethodNormalizer
使用获取器和设置器来完成其工作。
class User { protected $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } }
让我们再次进行规范化和反规范化。
use Normalt\Normalizer\AggregateNormalizer; use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer; $aggregate = new AggregateNormalizer([new GetSetMethodNormalizer]); $user = new User; $user->setName('henrik'); $array = $aggregate->normalize($user); // $array now contains ['name' => 'henrik'] $user = $aggregate->denormalize($array, 'User'); echo $user->getName(); // outputs Henrik
与该包中的其他规范化器相比,与序列化器一起使用这个没有意义,因为序列化器已经提供了大多数功能。
DoctrineNormalizer
DoctrineNormalizer
将映射对象(实体、文档等)规范化为数组,然后再将它们转换回对象。
它的用法非常简单。以下示例假设有一个映射对象 $user
,并且您正在使用 doctrine orm(其他 doctrine 项目也可以使用)。
use Doctrine\ORM\EntityManager; use Normalt\Normalizer\DoctrineNormalizer; // create $entityManager $normalizer = new DoctrineNormalizer($entityManager); // assuming $user is a mapped object and have the identifier value of 10. the following will return // array('MyModel\User', 10) $array = $normalizer->normalize($user); // using the same structure you can convert it back into a user $user = $normalizer->denormalize($array, null);
RecursiveReflectionNormalizer
规范化器也像 AggregateNormalizer
一样进行代理,但它将为您正在规范化的对象中的每个属性进行代理。它通过递归来完成这项工作,因此如果规范化器不支持给定的属性并且它是数组,它将遍历该数组以查找更多的对象。
在反规范化时发生同样的情况,只是在循环之前,它将尝试找到一个支持属性结构的反规范化器。
使用方法与其他一样简单,以下示例使用 DoctrineNormalizer
,并假设我们有一个包含对用户引用的 $profile
对象,其中 $profile->user
。
use Normalt\Normalizer\RecursiveReflectionNormalizer; use Normalt\Normalizer\DoctrineNormalizer; $normalizer = new RecursiveReflectionNormalizer([new DoctrineNormalizer($entityManager)]); // following will return assuming User is mapped and has the identifier of 10 //['user' => ['MyModel\User', 10]] $array = $normalizer->normalize($profile); // converting it back into the object. // $profile->user is now an instance of MyModel\User $profile = $normalize->denormalize($array, 'MyModel\Profile');
许可证
请参阅包含的 LICENSE
文件。