Symfony2 框架序列化工具的使用(一)
不知道是从哪个版本开始(我目前用的是2.8)开始自带了序列化工具(可以不用装JMSSerializer啦),但除了 config.yml 文件里 framework 下的一个选项以外,再也看不到任何的信息来说明怎么去使用它。Symfony2 文挡撰写的速度赶不上功能添加的速度一直是个问题,没办法只能自己从代码里去研究到底是个什么样的用法。这里将得到的一些结论分享给大家。
在 config.yml 当中:
framework: serializer: ~
这时将会开启一个叫做 serializer的服务,用法:
// 假如在某个controller action里,有一个 $user 对象:$json = $this->get('serializer')->serialize($user, 'json');// 或者可以只normalize成一个数组$userData = $this->get('serializer')->normalize($user);
一般来说,json 数据的 key 都是 snake_case 的风格,而默认 serialize 出来的是 camelCase 的,当然框架的开发者们早就做好了准备,我们需要做的只是再修改一下配置:
framework: serializer: name_converter: serializer.name_converter.camel_case_to_snake_case
Symfony2 甚至提供了缓存的选项,并且在 config_prod.yml 里已经有相关的配置了,只不过默认被注释掉了而已:
framework: serializer: cache: serializer.mapping.cache.apc
如果看过 Symfony Serializer Component 的 文档,应该知道序列化组件支持定义 group,什么意思呢?比如如下的代码:
use Symfony\Component\Serializer\Annotation\Groups; class User{ /** * @Groups({"group1"}) */ public $name; ...}
如果序列化的时候使用 $serializer->normalize($user, 'json', ['groups' => ['group1']])指定只获取 group1 的属性,那么只有 name 属性会被暴露在接口的结果里。
指定 group 可以使用 yaml 和 xml 以及 annotation,然而 annotation 默认是关闭的,但我们可以通过以下配置打开:
framework: serializer: enable_annotations: true
这一篇文章只是简单介绍 Symfony2 框架序列化工具的正确打开方式,但序列化的工作远不止如此。框架默认使用 ObjectNormalizer 来获取对象的属性值(ObjectNormalizer 使用的是 Symfony PropertyAccess Component),在没有特殊要求的情况下已经可以很好的工作,下一章将告诉大家,如何使用 GetSetMethodNormalizer ,也就是只通过对象的 getter/hasser/isser 来暴露对象属性值的方式,以及添加更多的自定义 Normalizer 的方式。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸
