happyr / serializer-bundle
Symfony的serializer组件之上的一个扩展包。它支持注解。
Requires
- php: ^5.5|^7.0
- doctrine/annotations: ^1.2
- symfony/finder: ^2.7|^3.0
- symfony/serializer: ^2.7.10|^3.0
- twig/twig: ^1.18|^2.0
Requires (Dev)
- phpunit/phpunit: ^4.8
- symfony/symfony: ^2.7|^3.0
This package is auto-updated.
Last update: 2024-08-25 06:53:45 UTC
README
使Symfony的serializer组件易于使用。
安装
通过Composer
$ composer require happyr/serializer-bundle
在您的kernel中启用扩展包
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Happyr\SerializerBundle\HappyrSerializerBundle(), ); }
用法
use \Happyr\SerializerBundle\Annotation as Serializer; /** * @Serializer\ExclusionPolicy("all") */ class Car { /** * @Serializer\Expose */ private $size = 'Small'; /** * @Serializer\Expose * @Serializer\Accessor({"getter":"getModel"}) */ private $model = 'Volvo'; private $color = 'Red'; public function getModel() { return 'This is model: '.$this->model; } } class Owner { private $name; /** * @Serializer\Type("Car") */ private $car; /** * @Serializer\ReadOnly */ private $birthday; public function __construct() { $this->name = 'Tobias'; $this->car = new Car(true); $this->birthday = new \DateTime('1989-04-30'); } } $json = $this->container->get('serializer')->serialize(new Owner(), 'json'); var_dump($json);
{ "name":"Tobias", "car":{ "size":"Small", "model":"This is model: Volvo" }, "birthday":"1989-04-30T00:00:00+02:00" }
内部机制
此扩展包为Symfony的serializer组件提供了一个自定义的规范化器。这使得该规范化器非常灵活。如果您想以非常定制的方式序列化对象,请按照Symfony文档中描述的方法添加自己的序列化器。
配置
您需要提供一条或多条路径,指向您的源代码所在位置。
// app/config/config.yml happyr_serializer: source: ['%kernel.root_dir%/../src'] # default twig_extension: false # default
添加元数据
目前,您只能使用注解来配置规范化器。这些注解与JmsSerializer非常相似。
@ExclusionPolicy
此注解可以定义在类上,以指示该类应使用的排除策略。
@Exclude
此注解可以定义在属性上,以指示该属性不应序列化/反序列化。仅与ExclusionPolicy = "NONE"结合使用。
@Expose
此注解可以定义在属性上,以指示该属性应序列化/反序列化。仅与ExclusionPolicy = "ALL"结合使用。
@SerializedName
此注解可以定义在属性上,以定义属性的序列化名称。如果未定义,则属性将从驼峰式转换为下划线分隔的小写名称,例如camelCase -> camel_case。
@Groups
此注解可以定义在属性上,以指定在仅序列化特定组时是否应序列化该属性。如果排除,则属性/方法将获得"默认"组。
@Accessor
此注解可以定义在属性上,以指定哪个公共方法应该被调用以检索或设置给定属性的值。默认情况下,我们通过反射访问属性。
<?php use \Happyr\SerializerBundle\Annotation as Serializer; class User { private $id; /** * @Serializer\Accessor(getter="getTrimmedName",setter="setName") */ private $name; // ... public function getTrimmedName() { return trim($this->name); } public function setName($name) { $this->name = $name; } }
@ReadOnly
此注解可以定义在属性上,以指示属性的属性是只读的,不能在反序列化期间设置。
可以使用@ReadOnly(false)
注解将属性标记为非只读(当类被标记为只读时很有用)。