站在巨人的肩膀上 - 使用symfony框架开发你的下一个项目 · •...

52
站在巨的肩膀上 使Symfony开发你的下个项 洪涛 PHPCon2017

Upload: others

Post on 18-Oct-2020

24 views

Category:

Documents


0 download

TRANSCRIPT

  • 站在巨⼈人的肩膀上 — 使⽤用Symfony开发你的下⼀一个项⽬目

    洪涛 PHPCon2017

  • 个⼈人简介

    洪涛,现任携⻋车⽹网 CTO,喜好技术研究和分享,曾受邀参加多个技术⼤大会并担任讲师。
 从2009年年开始接触Symfony,多次完整经历了了使⽤用Symfony开发的项⽬目,积累了了⼤大量量相关经验,曾在慕课⽹网制作了了《洪⼤大师带你解读Symfony2框架》系列列视频课程。
 最近关注的领域是产品和技术的深度结合,以及如何⽤用技术推动公司业务发展。

  • 问:请问如何评价Symfony这个框架?
答:『优点:强⼤大。缺点:太强⼤大』

    
 — 来⾃自某知乎⽹网友

  • 1. Symfony是什什么?

    2. Symfony的⼀一些特性和功能介绍

    3. 如何开始使⽤用Symfony

    4. 我使⽤用 Symfony 8年年来的⼀一些感悟和理理解

  • 1. Symfony是什什么

  • Symfony

    • Github上最活跃的PHP项⽬目之⼀一

    • ⼤大量量来⾃自官⽅方和开源社区的⽀支持

    • ⼤大量量成熟的功能插件

    • 以此构建并衍⽣生出的⽣生态环境已经影响了了整个PHP开发圈

  • Symfony的版本• Symfony 1.x

    • 05年年发布,12年年停⽌止维护

    • Symfony 2.x~3.x~4.x

    • 11年年发布

    • 最新LTS版本2.8

    • ⾮非LTS版本3.2

  • 2. 特性和功能介绍

  • 如何做CRUD?

  • 只要三步?

    1. 定义类

    2. 写⼏几个基本的⽅方法

    3. 执⾏行行⼏几个命令

  • 定义Entity

  • 定义AdminClass

  • 零代码实现复杂表关系的CRUD

    SonataAdminBundle:ModelTypeList

  • 为什什么能做到?

    数据库

    PHP代码

    ⽤用户操作 前端⻚页⾯面

    DoctrineBundle
BooleanType

    SonataCoreBundle
BooleanType

  • 数据库ORM - Doctrine

  • 使⽤用ORM操作数据库

    新增

    更更新

    删除

  • ⾃自动获取关联表的数据

    • 当执⾏行行第⼆二句句时,Doctrine会⾃自动帮我们⽣生成⼀一个包含join的sql语句句并运⾏行行,然后把city表⾥里里的name字段返回给我们

  • • 原⽣生SQL

    • ⾯面向对象的类操作

    • Doctrine 
Query Language

  • Doctrine很慢吗?

    • Doctrine能把数据库操作进⾏行行预处理理和合并:
persist():把操作”暂存”起来
flush():把各种操作进⾏行行合并计算,得到结果后⼀一并在数据库⾥里里操作并commit

    • Doctrine能把对数据库的操作规范并统⼀一,⽅方便便集中优化SQL语句句和表结构

  • Annotation

  • • 路路由,该⽅方法可以通过/get_city_by_location访问到 • 访问类型,限制了了只能通过GET访问 • 定义了了API参数,能够⽣生成API调试⻚页⾯面

    对于Controller Annotation还可以实现: 定义Cache、定义访问权限、HTTP参数的预处理理……

  • ⼀一般情况下,Controller⾥里里,真正业务逻辑所占的⽐比例例

  • 使⽤用Annotation后,可以将业务逻辑和其他代码进⾏行行分离,实现解耦

  • 快速进⾏行行接⼝口开发

  • 使⽤用Annotation快速定义
API接⼝口⽂文档

  • ⾃自动⽣生成接⼝口⽂文档和调试⻚页⾯面

    接⼝口列列表

    接⼝口详情⻚页(⽀支持在线调试)

  • IoC / DI / Service

  • 举个例例⼦子:发送邮件

    Controller:负责调⽤用发送邮件的Service

    Mail Service:负责实现具体如何发送邮件

  • 使⽤用Service的优势• 在整个程序执⾏行行上下⽂文环境中,不不管调⽤用Service多少次,实例例化的对象都可以是同⼀一个,Symfony的Service管理理器器会为你管理理所有Service对象

    • Service具有Lazy-loaded特性,可以在你调⽤用的时候再进⾏行行初始化

    • 在程序的任何⻆角落都可以调⽤用Service(模板,Action,其他的Service,各种监听事件……)

    • Service是优秀和先进的软件架构,帮助你管理理复杂的业务逻辑和系统功能逻辑。可以让你以最⼩小的代价响应业务逻辑的迅速变化

  • 性能

  • 这么多『花⾥里里胡哨』的功能,Symfony性能会很差吗?

    • 100%兼容HHVM

    • ⽀支持多环境(dev/test/staging/prod/……),每个环境都可以⾃自⾏行行配置

    • Lazy-loaded:使你的程序只加载它⽤用得到的代码

    • 强⼤大的代码预处理理功能:Annotation/Twig模板/Service等

  • Symfony Proxy with Varnish — RPS性能提升百倍的利利器器

  • Symfony Proxy Web Server

    GET /

    GET /esi/xxxx

    Browser

  • Symfony Proxy vs Varnish

    数据来源:symfony.fi

    某电商项⽬目Html⻚页 某电商项⽬目API接⼝口

    http://symfony.fi

  • Symfony Debug Bar — Timeline

  • Blackfire — 专业的在线性能分析⼯工具

    程序执⾏行行树状图 程序执⾏行行Timeline

  • 3. 如何开始使⽤用Symfony

  • Symfony有好多版本,该怎么选?

    • 2.6/2.7/2.8/3.0/3.1/3.2/3.3/4.0

    • 为什什么有那么多版本?

    • 追求稳定性:2.8 LTS

    • 希望使⽤用新功能:3.2

  • 现在做项⽬目⽤用什什么版本号?

    • 我推荐使⽤用:2.8 LTS,因为:

    • 2.8 稳定版本,已经上线2年年,社区⽀支持⾜足够⼴广

    • 兼容第三⽅方Bundle⽐比较多

    • 明年年年年中左右开始逐步迁移到3.4

  • ⼀一些学习资料料

    • 官⽹网:http://symfony.com/
官⽅方Github:https://github.com/symfony
Bundles仓库:http://knpbundles.com/

    • 慕课⽹网视频教程《洪⼤大师带你解读Symfony2框架》:http://www.imooc.com/learn/244
国外视频教程:http://knpuniversity.com/

    • 国内QQ交流群:230078413

    http://symfony.com/https://github.com/symfonyhttp://www.imooc.com/learn/244

  • Symfony内的⼤大量量组件 是可以分拆使⽤用的

    • 基于Symfony核⼼心组件的框架—Silex/Laravel

    • 数据库ORM—Doctrine

    • HTTP请求处理理核⼼心类—HttpKernel

    • 模板引擎—Twig

    • 路路由引擎—Symfony\Component\Routing

    • Service引擎

    • 等等……laravel/composer.json

  • Symfony甚⾄至允许并⿎鼓励你去基于它的组件去创造⾃自⼰己的框架

    http://symfony.com/doc/current/create_framework/index.html

    http://symfony.com/doc/current/create_framework/index.html

  • 4. 我的⼀一些感悟和理理解

  • 不不同阶段的开发侧重点• 初期

    • 关注开发速度,快速开发出『够⽤用』的产品原型

    • 中期

    • 快速响应业务变化

    • 后期

    • 性能优化,『尽量量』少改代码

  • “Distributions is the wrong abstraction. We don’t need a fully bootstrapped project. We need a way to grow an application over time.”

    现在许多『框架』的发展⽅方向都错了了。与其让开发者接受⼀一个⼤大⽽而全的解决⽅方案,不不如为其提供⼀一种能够稳步发展的开发⽅方式。

  • 很多⽹网友经常会问我的问题

    • Symfony太慢了了

    • 真像你说的那么好,怎么国内没⼈人⽤用?

    • 我英⽂文不不好啊,Symfony的中⽂文资料料真的很少啊,我看的很累

  • 谢谢