Кодировщики

Кодировщики

Кодировщики по существу превращают массивы в форматы и наоборот. Они реализуют EncoderInterface для шифрования (массива в формат) и DecoderInterface для дешифровки (формата в массив).

Вы можете добавлять новые кодировщики в экземпляр Сериализатора, используя его второй аргумент конструктора:

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);

Встроенные кодировщики

В примере выше используется два кодировщика:

  • XmlEncoder, чтобы шифровать/дешифровать XML
  • JsonEncoder, чтобы шифровать/дешифровать JSON

XmlEncoder

Этот кодировщик трансформирует массивы в XML и наоборот.

Например, возьмите объект, нормализованный следующим образом:

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

XmlEncoder зашифрует этот объект таким образом:

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

Имейте в виду, что этот кодировщик рассмотрит ключи, начинающиеся с @ в качестве атрибутов:

1
2
3
4
5
6
7
$encoder = new XmlEncoder();
$encoder->encode(array('foo' => array('@bar' => 'value')));
// вернёт:
// <?xml version="1.0"?>
// <response>
//     <foo bar="value" />
// </response>

JsonEncoder

JsonEncoder намного проще и основывается на функциях PHP json_encode и json_decode.