Cara menggunakan Serializer
Siri dan penyahserikatan antara objek dan format yang berbeza (seperti JSON atau XML) ialah topik yang sangat kompleks. Symfony dilengkapi dengan Komponen Serializer, yang memberikan anda beberapa alatan yang boleh anda gunakan mengikut keperluan.
Sebenarnya, sebelum anda mula menggunakannya, biasakan diri dengan serializer, normalizer dan encoder, baca artikel Serializer component.
Aktifkan Serializer ¶
Perkhidmatanserializer
tidak tersedia secara lalai. Untuk menghidupkannya, aktifkannya dalam fail konfigurasi anda: serializer
服务默认不可用。要开启它,在你的配置文件中激活它:
PHP:// app/config/config.php$container->loadFromExtension('framework', array( // ... 'serializer' => array( 'enabled' => true, ),));
XML:<!-- app/config/config.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" xmlns:framework="http://symfony.com/schema/dic/symfony" xmlns:twig="http://symfony.com/schema/dic/twig" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd http://symfony.com/schema/dic/twig http://symfony.com/schema/dic/twig/twig-1.0.xsd"> <framework:config> <!-- ... --> <framework:serializer enabled="true" /> </framework:config></container>
YAML:# app/config/config.ymlframework: # ... serializer: enabled: true
使用Serializer服务 ¶
一旦开启, serializer
服务可以在你需要它时注入到任何服务中,或者像下面这样在控制器中使用:
// src/AppBundle/Controller/DefaultController.phpnamespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller{ public function indexAction() { $serializer = $this->get('serializer'); // ... }}
添加Normalizers和Encoders ¶
被开启之后, serializer
在容器中可用,被加载时还带有两个 encoders(JsonEncoder
和 XmlEncoder
)以及ObjectNormalizer normalizer。
你可以加载normalizers和/或encoders,只要给它们打上 serializer.normalizer 和 serializer.encoder 标签。也可以设置标签的优先级,以便决定匹配顺序。
下例演示了如何加载 GetSetMethodNormalizer
PHP:// app/config/services.phpuse Symfony\Component\DependencyInjection\Definition; $definition = new Definition( 'Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer'));$definition->setPublic(false);$definition->addTag('serializer.normalizer');$container->setDefinition('get_set_method_normalizer', $definition);
XML:<!-- app/config/services.xml --><services> <service id="get_set_method_normalizer" class="Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer" public="false"> <tag name="serializer.normalizer" /> </service></services>
YAML:# app/config/services.ymlservices: get_set_method_normalizer: class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer public: false tags: - { name: serializer.normalizer }Gunakan perkhidmatan Serializer ¶🎜🎜🎜Setelah didayakan,
PHP:// app/config/config.php$container->loadFromExtension('framework', array( // ... 'serializer' => array( 'enable_annotations' => true, ),));🎜Tambah Penormal dan Pengekod Selepas ¶🎜🎜🎜🎜 didayakan,
serializer
tersedia dalam bekas dan dimuatkan dengan dua 🎜encoders🎜 (JsonEncoder🎜
dan XmlEncoder🎜
) dan 🎜ObjectNormalizer normalizer🎜. 🎜🎜Anda boleh memuatkan penormal dan/atau pengekod dengan menandakannya dengan serializer.normalizer🎜 dan serializer.encoder🎜 teg. Anda juga boleh menetapkan keutamaan teg untuk menentukan susunan padanan. 🎜🎜Contoh berikut menunjukkan cara memuatkan GetSetMethodNormalizer🎜
: 🎜XML:<!-- app/config/config.xml --><framework:config> <!-- ... --> <framework:serializer enable-annotations="true" /></framework:config>
YAML:# app/config/config.ymlframework: # ... serializer: enable_annotations: true🎜
$serializer = $this->get('serializer');$json = $serializer->serialize( $someObject, 'json', array('groups' => array('group1')));🎜
Gunakan anotasi kumpulan bersiri
@Groups
注释,serializer组件还支持Yaml或Xml文件。这些组件在存放于以下位置时将被自动加载:
存放在bundle下面的
Resources/config/
目录中的serialization.yml
或serialization.xml
;存放在bundle下面的
Resources/config/serialization/
目录中的所有*.yml
和*.xml
。
开启Metadata缓存 ¶
被Serializer组件所使用的metadata,诸如groups,可以被缓存,以提升程序性能。任何实现了 DoctrineCommonCacheCache
接口的服务都可以被使用。
一个利用了 APCu 的服务被内置在框架中:
PHP:// app/config/config_prod.php$container->loadFromExtension('framework', array( // ... 'serializer' => array( 'cache' => 'serializer.mapping.cache.apc', ),));
XML:<!-- app/config/config_prod.xml --><framework:config> <!-- ... --> <framework:serializer cache="serializer.mapping.cache.apc" /></framework:config>
YAML:# app/config/config_prod.ymlframework: # ... serializer: cache: serializer.mapping.cache.apc
开启一个命名转换器 ¶
2.8 name_converter
选项从Symfony 2.8开始被引入。
要使用 name converter服务,可以在配置文件中使用 name_converter选项进行定义。
内置的 CamelCase to snake_case name converter(驼峰转蛇型转换器)可以通过设置 serializer.name_converter.camel_case_to_snake_case
@Groups
, komponen serializer juga menyokong fail Yaml atau Xml. Komponen ini akan dimuatkan secara automatik apabila disimpan di lokasi berikut: 🎜🎜- 🎜
serialization.yml
Resources/config/ di bawah bundle > Atauserialization.xml
; 🎜 - 🎜Semua
*.yml disimpan dalam direktori
Resources/config/serialization/
di bawah bundle code> dan*.xml
. 🎜
DoctrineCommonCacheCache
boleh digunakan. 🎜🎜Perkhidmatan yang menggunakan APCu🎜 dibina ke dalam rangka kerja: 🎜PHP:// app/config/config.php$container->loadFromExtension('framework', array( // ... 'serializer' => array( 'name_converter' => 'serializer.name_converter.camel_case_to_snake_case, ), ));
XML:<!-- app/config/config.xml --><framework:config> <!-- ... --> <framework:serializer name-converter="serializer.name_converter.camel_case_to_snake_case" /></framework:config>
YAML:# app/config/config.ymlframework: # ... serializer: name_converter: 'serializer.name_converter.camel_case_to_snake_case'🎜Dayakan penukar penamaan ¶🎜🎜
name_converter
telah diperkenalkan bermula dengan Symfony 2.8 . 🎜🎜🎜Untuk menggunakan perkhidmatan penukar nama🎜, anda boleh menggunakan pilihan penukar_nama🎜 untuk ditakrifkan. . camel_case_to_snake_case code> nilai pilihan untuk membolehkan: 🎜rrreeerrreee🎜rrreee🎜Pensiri Mendalam ¶
ApiPlatform menyediakan sistem API yang menyokong format hipermedia JSON-LD dan Hydra Core Vocabulary. Ia dibina pada rangka kerja Symfony dan komponen Serializer. Ia menyediakan penormal tersuai, pengekod tersuai, metadata tersuai dan sistem caching.
Jika anda ingin memanfaatkan kuasa penuh komponen Symfony Serializer, anda harus melihat cara berkas ini berfungsi.