站在巨人的肩膀上 - 使用Symfony框架开发你的下一个项目--洪涛@PHPCON2017

PHPConChina

2017/06/21 发布于 编程 分类

站在巨人的肩膀上 - 使用Symfony框架开发你的下一个项目--洪涛@PHPCON2017

PHPCon2017 

文字内容
1. 站在巨⼈人的肩膀上 — 使⽤用Symfony开发你的下⼀一个项⽬目 洪涛 PHPCon2017
2. 个⼈人简介 洪涛,现任携⻋车⽹网 CTO,喜好技术研究和分享, 曾受邀参加多个技术⼤大会并担任讲师。
 从2009年年开始接触Symfony,多次完整经历了了使 ⽤用Symfony开发的项⽬目,积累了了⼤大量量相关经验,曾在 慕课⽹网制作了了《洪⼤大师带你解读Symfony2框架》系列列 视频课程。
 最近关注的领域是产品和技术的深度结合,以及 如何⽤用技术推动公司业务发展。
3. 问:请问如何评价Symfony这个框架?
 答:『优点:强⼤大。缺点:太强⼤大』 
 — 来⾃自某知乎⽹网友
4. 1. Symfony是什什么? 2. Symfony的⼀一些特性和功能介绍 3. 如何开始使⽤用Symfony 4. 我使⽤用 Symfony 8年年来的⼀一些感悟和理理解
5. 1. Symfony是什什么
6. Symfony • Github上最活跃的PHP项⽬目之⼀一 • ⼤大量量来⾃自官⽅方和开源社区的⽀支持 • ⼤大量量成熟的功能插件 • 以此构建并衍⽣生出的⽣生态环境已经影响了了整个PHP 开发圈
7. Symfony的版本 • Symfony 1.x • • 05年年发布,12年年停⽌止维护 Symfony 2.x~3.x~4.x • 11年年发布 • 最新LTS版本2.8 • ⾮非LTS版本3.2
8. 2. 特性和功能介绍
9. 如何做CRUD?
10. 只要三步? 1. 定义类 2. 写⼏几个基本的⽅方法 3. 执⾏行行⼏几个命令
11. 定义Entity
12. 定义AdminClass
15. 零代码实现复杂表关系的CRUD SonataAdminBundle:ModelTypeList
16. 为什什么能做到? 数据库 PHP代码 ⽤用户操作 前端⻚页⾯面 DoctrineBundle
 BooleanType SonataCoreBundle
 BooleanType
17. 数据库ORM - Doctrine
18. 使⽤用ORM操作数据库 更更新 新增 删除
19. ⾃自动获取关联表的数据 • 当执⾏行行第⼆二句句时,Doctrine会⾃自动帮我们⽣生成⼀一个 包含join的sql语句句并运⾏行行,然后把city表⾥里里的name 字段返回给我们
20. • 原⽣生SQL • ⾯面向对象的类操作 • Doctrine 
 Query Language
21. Doctrine很慢吗? • Doctrine能把数据库操作进⾏行行预处理理和合并:
 persist():把操作”暂存”起来
 flush():把各种操作进⾏行行合并计算,得到结果后⼀一 并在数据库⾥里里操作并commit • Doctrine能把对数据库的操作规范并统⼀一,⽅方便便集 中优化SQL语句句和表结构
22. Annotation
24. • • • 路路由,该⽅方法可以通过/get_city_by_location访问到 访问类型,限制了了只能通过GET访问 定义了了API参数,能够⽣生成API调试⻚页⾯面 对于Controller Annotation还可以实现: 定义Cache、定义访问权限、HTTP参数的预处理理……
25. ⼀一般情况下,Controller⾥里里,真正 业务逻辑所占的⽐比例例
26. 使⽤用Annotation后,可以将业务逻 辑和其他代码进⾏行行分离,实现解耦
27. 快速进⾏行行接⼝口开发
28. 使⽤用Annotation快速定义
 API接⼝口⽂文档
29. ⾃自动⽣生成接⼝口⽂文档和调试⻚页⾯面 接⼝口列列表 接⼝口详情⻚页(⽀支持在线调试)
30. IoC / DI / Service
31. 举个例例⼦子:发送邮件 Controller:负责调⽤用发送邮件的Service Mail Service:负责实现具体如何发送邮件
32. 使⽤用Service的优势 • • • • 在整个程序执⾏行行上下⽂文环境中,不不管调⽤用Service多少次,实例例化 的对象都可以是同⼀一个,Symfony的Service管理理器器会为你管理理所 有Service对象 Service具有Lazy-loaded特性,可以在你调⽤用的时候再进⾏行行初始 化 在程序的任何⻆角落都可以调⽤用Service(模板,Action,其他的 Service,各种监听事件……) Service是优秀和先进的软件架构,帮助你管理理复杂的业务逻辑和 系统功能逻辑。可以让你以最⼩小的代价响应业务逻辑的迅速变化
33. 性能
34. 这么多『花⾥里里胡哨』的功能, Symfony性能会很差吗? • • • • 100%兼容HHVM ⽀支持多环境(dev/test/staging/prod/……),每个 环境都可以⾃自⾏行行配置 Lazy-loaded:使你的程序只加载它⽤用得到的代码 强⼤大的代码预处理理功能:Annotation/Twig模板/ Service等
35. Symfony Proxy with Varnish — RPS性能提升百倍的利利器器
37. Browser Symfony Proxy Web Server GET / 
 <esi:include'>esi:include src= “”/> <esi:include'>esi:include src= “”/> GET /esi/xxxx
38. Symfony Proxy vs Varnish 某电商项⽬目Html⻚页 某电商项⽬目API接⼝口 数据来源:symfony.fi
39. Symfony Debug Bar — Timeline
40. Blackfire — 专业的在线性能分析⼯工具 程序执⾏行行树状图 程序执⾏行行Timeline
41. 3. 如何开始使⽤用 Symfony
42. Symfony有好多版本,该怎么选? • 2.6/2.7/2.8/3.0/3.1/3.2/3.3/4.0 • 为什什么有那么多版本? • 追求稳定性:2.8 LTS • 希望使⽤用新功能:3.2
43. 现在做项⽬目⽤用什什么版本号? • • 我推荐使⽤用:2.8 LTS,因为: • 2.8 稳定版本,已经上线2年年,社区⽀支持⾜足够⼴广 • 兼容第三⽅方Bundle⽐比较多 明年年年年中左右开始逐步迁移到3.4
45. ⼀一些学习资料料 • • • 官⽹网:http://symfony.com/
 官⽅方Github:https://github.com/symfony
 Bundles仓库:http://knpbundles.com/ 慕课⽹网视频教程《洪⼤大师带你解读Symfony2框架》: http://www.imooc.com/learn/244
 国外视频教程:http://knpuniversity.com/ 国内QQ交流群:230078413
46. Symfony内的⼤大量量组件 是可以分拆使⽤用的 • 基于Symfony核⼼心组件的框架—Silex/Laravel • 数据库ORM—Doctrine • HTTP请求处理理核⼼心类—HttpKernel • 模板引擎—Twig • 路路由引擎—Symfony\Component\Routing • Service引擎 • 等等…… laravel/composer.json
47. Symfony甚⾄至允许并⿎鼓励你去基于 它的组件去创造⾃自⼰己的框架 http://symfony.com/doc/current/create_framework/index.html
48. 4. 我的⼀一些感悟和理理解
49. 不不同阶段的开发侧重点 • 初期 • • 中期 • • 关注开发速度,快速开发出『够⽤用』的产品原型 快速响应业务变化 后期 • 性能优化,『尽量量』少改代码
50. “Distributions is the wrong abstraction. We don’t need a fully bootstrapped project. We need a way to grow an application over time.” 现在许多『框架』的发展⽅方向都错了了。与其让开发者 接受⼀一个⼤大⽽而全的解决⽅方案,不不如为其提供⼀一种能够 稳步发展的开发⽅方式。
51. 很多⽹网友经常会问我的问题 • Symfony太慢了了 • 真像你说的那么好,怎么国内没⼈人⽤用? • 我英⽂文不不好啊,Symfony的中⽂文资料料真的很少啊, 我看的很累
52. 谢谢