感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
Serializer组件 使用了Normalizers来把任意数据转换成数组。然后再利用 Encoders 把数据转换成任意数据结构 (如 JSON)。
组件提供了几个内置的encoders,在 它们自己的章节 中有述,但你可能希望使用另一种不被支持的结构。
假设你要对Yaml进行序列化和反序列化。因此你不得不使用 Yaml组件 来创建自己的encoders:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | namespace AppBundle\Serializer;
use Symfony\Component\Serializer\Encoder\DecoderInterface;
use Symfony\Component\Serializer\Encoder\EncoderInterface;
use Symfony\Component\Yaml\Yaml;
class YamlEncoder implements EncoderInterface, DecoderInterface
{
public function encode($data, $format, array $context = array())
{
return Yaml::dump($data);
}
public function supportsEncoding($format)
{
return 'yaml' === $format;
}
public function decode($data, $format, array $context = array())
{
return Yaml::parse($data);
}
public function supportsDecoding($format)
{
return 'yaml' === $format;
}
} |
如果你使用的是Symfony完整版框架,你可能希望在程序中把这个encoder注册为服务。那么,你只需给它打上 serializer.encoder
标签,即可将这个自定义的encoder注入到Serializer中。
1 2 3 4 5 6 | # app/config/services.yml
services:
app.yaml_encoder:
class: AppBundle\Serializer\YamlEncoder
tags:
- { name: serializer.encoder } |
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- app/config/services.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="app.yaml_encoder" class="AppBundle\Serializer\YamlEncoder">
<tag name="serializer.encoder" />
</service>
</services>
</container> |
1 2 3 4 5 6 7 | // app/config/services.php
use AppBundle\Serializer\YamlEncoder;
$container
->register('app.yaml_encoder', YamlEncoder::class)
->addTag('serializer.encoder')
; |
现在你已经可以序列化和反序列化Yaml了!
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。