Symfony框架开发

Symfoy框架概要

Symfony是一款以MIT方式开源的用于构建网站和开发互联网产品的MVC框架,包括30多个独立的基础组件。Symfony即是一组组件,又是一个框架.在框架的基于上可以根据需要加载不同的组件。目前是强大而全面的最重量级的企业级PHP框架。现在Symfony框架已成为大型互联网公司的首选框架。

Symfony目标是开发职业化、最佳实践、标准化以及可复用的现代PHP程序:

  1. 在企业背景下创建健壮的应用,同时也给予了开发者强大的配置功能:从文件结构到外部目录,几乎所有的东西都可以自定义。Symfony也捆绑了一些诸如测试、调试、文档生成等额外的工具来满足企业的开发过程。

  2. Symfony包括30多个低耦合、可复用的组件,能够随需使用在任何地方,现已构建出诸多顶级PHP应用程序。

  3. 减少重复代码的编写,以加速Web应用的开发和维护。

  4. Symfony高度重视业务逻辑,使用MVC等大量设计模式,分离了业务逻辑层和表示层,降低了耦合性,使代码易读,维护轻松,大大提升团队的开发效率,提高代码性能。

Symfony需要PHP 5+环境的软件支持。

Symfony使用了以下PHP开源项目的部分功能:

  1. Propel (PHP):用作对象关系映射(ORM)
  2. Doctrine (PHP):用作对象关系映射(ORM)
  3. Creole:用作数据库抽象层
  4. Prado:用作国际化支持
  5. Spyc:用作解析YAML
  6. Pake:用作命令行工具
  7. Twig:用作模板引擎

Symfony也使用了以下开源的Javascript库:

  1. Prototype:用作javascript框架(v1.0和1.1)
  2. script.aculo.us:用作视觉特效(v1.0和1.1)
  3. Dynarch.com,用作DHTML日历(v1.0和1.1)
  4. TinyMCE,用作富文本编辑器(v1.0)
  5. FCKeditor,用作富文本编辑器

在symfony1.2中默认状态没有包含任何JavaScript框架,开发者必须手动选择并添加JavaScript框架。

版本变化和升级

symfony源自于英文单词symphony"交响乐",表示程序间如交响乐般默契配合以臻“自动化程度很高、开发速度不可思议”。也有兼容2005年发布的旧版前身Sensio Frameworksf类名前缀sf的意思

在互联网快速发展的今天,企业之间的竞争越来越激烈。只有以用户为中心,快速响应用户的需求,不断迭代和试错,才能让企业在竞争当中立于不败。市场变化越来越快,拥抱变化才是大势所趋。企业级框架为了适应变化,采取半年一版的快速迭代和一年半一个LTS稳定版的版本发布模式,这样可以在“更快更强”和“长期稳定”之间做一个平衡。

Symfony的升级与安装一样困难。比如Symfony2升级到3.3.0要折腾个两个钟头,因为相关依赖需要重新安装或升级,还要调试修改程序代码。

如果要把旧项目升级,建议通过以下步骤升级:
  1. Symfony2.6到Symfony2.7

  2. Symfony2.7到Symfony2.8

  3. Symfony2.8到Symfony3.4 4

  4. Symfony3.4到Symfony4.4.4

  5. Symfony4.4到Symfony5

Symfony 3.0 = Symfony 2.8 – 不建议使用的功能

Symfony 4.0 = Symfony 3.4 – 不建议使用的功能 + 新的开发方式

或者

Symfony 4.0 = Symfony 3.0 + 所有 3.x 添加的新功能 – 不建议使用的功能 + 新的开发方式

同时,SF4 将要求使用 PHP 7

据说Symfony5.04之后升级就容易了,拭目以待。

速度优化

symfony框架 第一次访问异常缓慢 如何解决?刚装的框架 第一次运行的时候异常缓慢 时间为5-10秒的样子 。看了下代码是在做初始化引导文件和创建缓存文件造成的。

symfony 自从 4.0 之后框架的性能一直优化的比较好。

symfony 使用的 Annotation 是框架特色之一,(虽然PHP的Annotation性能比Java弱很多)

由Annotation构建的路由是可以被直接缓存在路由系统中的。

  1. symfony 2.x, 3.x 4.x 使用的是 bin/console cache:warmup 这个命令预热缓存

  2. 或者使用cache:clear 这个命令在清除缓存后也会预热缓存

  3. 还可以在PHP中启用内置的Opcahce 完成对路由及框架的缓存

  4. 也可以使用Memecached和Redis等缓存。

最后再说下,影响一个web 应用访问速度的因素有很多。如果题主是要做API接口的话。和单个模板渲染是不同的优化方式

第一次运行慢主要是框架在生成缓存文件。

对于Symfony3以上版本可以使用php bin/console cache:warmup 命令预热缓存

优点

  1. 深度解耦。它的解耦体现在很多方面,比如它会把程序封装为各个Bundle,耦合程度进一步降低。

  2. 极度灵活。它的灵活体现在很多方面,单纯就配置文件的格式来说就可以使用yml格式、xml格式、php格式等等。

  3. 功能强大。它支持非常多的功能,而且封装的比较彻底,几乎包含了你开发生命周期所需要的一切,web开发工具栏,高度的封装,完善的测试,还有强大的命令行等等,就和Emacs一样,你以为它只是个框架,其实它是伪装成框架的IDE。也因此它的响应速度会比功能简单的CI、ThinkPHP慢。

  4. 兼容并包,借鉴了JAVA、Python等编程思想,成为公认的框架典范。
  5. 某种意义上,Symfony是对PHP的救赎:Symfony类似于一个PHP领域的“中台”。前端技术快速变革,而服务器端脚本PHP一度停滞不前,从Symfony2开始,一个划时代的PHP框架诞生了,它以面向服务为核心,首创了PHP框架中的可复用组件和至今无人能出其右的Extension架构,榨干弱类型PHP的面向对象特性,活用所有Design Pattern,以“不向下兼容”的无畏神勇和超前预见——重写了整个框架,成为PHP业界“事实上的标准”。PHP7之后的Symfony3也愈发强大,JS采用TypeScript转向真正企业级OOP和“模块化”大规模开发。

  6. Symfony与许多关系型数据库集成的也非常好,成本也较小。

  7. 便于后期维护和扩展,只要这个框架支持composer一般都能支持扩展,这也意味着你可以不用反复造轮子,只要有能用的引用安装就行了,完全告别原来那种到处找类库的烦恼了。

  8. 当然要说优点还是有很多的,比如扩展性强等等,但是作为一个流行框架,扩展性一般都不会差到哪里去。

  9. 虽然学起来困难,但是物有所值。因为语言的学习是相通的,比如先学会了C,再学Java,.net等其他语言就能触类旁通,反而节省了时间。是不是就简单多了?学了Symfony,再学Yii2/Laravel就轻松了。而且优秀的现代框架之间思路也是大同小异,只在少许的语法和模板上不同。学了Symfony,再学.net mvc, java SSH等就容易了。

  10. symfony框架目前在国内用的也不太多,因为一是中文资料不是很多,二是以前的版本如2.6 ,3.4 学习起来比较陡峭.就是让一些人望而却步.而且旧版本的性能也不是很高.但这一切随着symfony 4.0的发布,彻底改变了. symfony 4,拥有开箱即用的性能.压力测试,输出hello world 达到 1000多rps,可以说性能非常高.这在纯PHP写的框架里数一数二. symfony 4.0 相较于之前的版本变得易于学习, 易于配置, 易于安装和部署, 更易于掌握。简单, 强大!基于symfony的几十个组件,可以实现任何你想要的功能,而又保持高性能.即可以开发简单的高性能API接口,微服务,又可以开发复杂的web系统,也可以开发后台任务程序.默认情况下,安装smyfony 4.0只安装最少的内核功能.以优化和消除任何非必要的依赖性,目前在PHP框架里是最小的.从小开始,你可以把你的程序通过添加组件而实现不断规模成。

缺点

基本上最大的问题就是学习曲线太陡,到现在我也只能说我是会用,不敢说掌握,精通那就更别提了。很简单,首先本身的语法你需要学习,思路需要理解,接着可能还有service、event这类你要懂吧,这还没完,别忘了最重要的Doctrine和Twig也要学,甚至到后来你可能要自定义一个表单的field,那就很痛苦了(然而这种时候我会改成ajax)

开发环境搭建

  1. 使用PHP内置的CLI-Server

  2. 使用Vagrant搭建完整开发环境:scourgen/Vagrant-PHP-Stack:VirtualBox下Vagrant开发环境资源;使用IT基础架构自动化Puppet 项目

  3. 搭建共享开发服务器

安装Symfony框架

本章主要讲解了Symfony的安装过程和注意事项,并对Symfony2核心文件及目录结构进行了详细的介绍,最后带领大家完成Hello World的编写。

路由

Symfony配置路由的两种方式

Annotation:允许你在方法的上面用注释定义方法运行状态的功能

router.yml

第5章 Controller

本章讲解如何使用Controller去编写程序中的业务逻辑,以及简单讲解如何调用Symfony2的服务进行业务逻辑的处理。

第6章 模板引擎Twig

Twig是Symfony2所使用的模板引擎,相比较其他引擎,Twig有其非常灵活高效的优势,本章详细解释如何使用Twig进行网站页面模板的开发。

第7章 CSS/JS文件管理

本章讲解如何使用Symfony2自带的CSS/JS资源管理系统进行前端文件的合并、编译、压缩、版本更新等。

第8章 数据库操作—Doctrine2(一)

Doctrine2是Symfony2所使用的数据库操作框架,本章详细解释如何使用Doctrine2进行数据库操作。

第9章 数据库操作—Doctrine2(二)

Doctrine2是Symfony2所使用的数据库操作框架,本章详细解释如何使用Doctrine2进行数据库操作。

第10章 数据库操作—Doctrine2(三)

Doctrine2是Symfony2所使用的数据库操作框架,本章详细解释如何使用Doctrine2进行数据库操作。

第11章 带你玩转symfony2表单

本章节主要介绍了表单的创建技巧,并通过实例演示玩转表单的五个阶段,带领小伙伴们轻轻松松掌握表单的精髓。

第12章 知识扩展

本章主要介绍了自定义配置、service以及测试脚本的知识,除此之外还介绍了实际工作中实用的第三方Bundle。

参见

  1. 更新后的PHP: 使用Vagrant 和PuPHPet 搭建环境 - IBM

  2. huajie1988/Jobeet-Tutorial:Symfony2 Jobeet教程的个人汉化

  3. dsyph3r/:Tutorial for symblog - Creating a blog in Symfony2 http://tutorial.symblog.co.uksymblog-docs

  4. 又不一样的Symfony —— SF4 展望