Encoders

3.4 版本
维护中的版本

Encoders基本上是把 arrays (数组)转换成 formats (数据格式),反之亦然。对于encoding(array to format/数组到数据格式),它们实现的是 EncoderInterface 接口,而对于decoding (format to array/数据格式到数组),实现的是 DecoderInterface 接口。

通过构造器中的第二个参数,你可以向一个Serializer实例添加新的encoders:

1
2
3
4
5
6
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
 
$encoders = array(new XmlEncoder(), new JsonEncoder());
$serializer = new Serializer(array(), $encoders);

内置的Encoders 

上例使用的两种encoder分别是:

XmlEncoder 

这个encoder把数组转换成XML,或者反之。

例如,接收一个下面这样的被标准化过(normalized)的对象:

1
array('foo' => array(1, 2), 'bar' => true);

XmlEncoder 将像这样来encode此对象:

1
2
3
4
5
6
<?xml version="1.0"?>
<response>
    <foo>1</foo>
    <foo>2</foo>
    <bar>1</bar>
</response>

注意这个encoder将把以 @ 开头的键视为属性(attributes):

1
2
$encoder = new XmlEncoder();
$encoder->encode(array('foo' => array('@bar' => 'value')));

将返回:

1
2
3
4
<?xml version="1.0"?>
<response>
    <foo bar="value" />
</response>

JsonEncoder 

JsonEncoder 要简单得多,它是基于PHP的 json_encodejson_decode 函数。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)