Symfony框架开发
Symfoy框架概要
Symfony是一款以MIT方式开源的用于构建网站和开发互联网产品的MVC框架,包括30多个独立的基础组件。Symfony即是一组组件,又是一个框架.在框架的基于上可以根据需要加载不同的组件。目前是强大而全面的最重量级的企业级PHP框架。现在Symfony框架已成为大型互联网公司的首选框架。
Symfony目标是开发职业化、最佳实践、标准化以及可复用的现代PHP程序:
在企业背景下创建健壮的应用,同时也给予了开发者强大的配置功能:从文件结构到外部目录,几乎所有的东西都可以自定义。Symfony也捆绑了一些诸如测试、调试、文档生成等额外的工具来满足企业的开发过程。
Symfony包括30多个低耦合、可复用的组件,能够随需使用在任何地方,现已构建出诸多顶级PHP应用程序。
减少重复代码的编写,以加速Web应用的开发和维护。
Symfony高度重视业务逻辑,使用MVC等大量设计模式,分离了业务逻辑层和表示层,降低了耦合性,使代码易读,维护轻松,大大提升团队的开发效率,提高代码性能。
Symfony需要PHP 5+环境的软件支持。
Symfony使用了以下PHP开源项目的部分功能:
- Propel (PHP):用作对象关系映射(ORM)
- Doctrine (PHP):用作对象关系映射(ORM)
- Creole:用作数据库抽象层
- Prado:用作国际化支持
- Spyc:用作解析YAML
- Pake:用作命令行工具
- Twig:用作模板引擎
Symfony也使用了以下开源的Javascript库:
- Prototype:用作javascript框架(v1.0和1.1)
- script.aculo.us:用作视觉特效(v1.0和1.1)
- Dynarch.com,用作DHTML日历(v1.0和1.1)
- TinyMCE,用作富文本编辑器(v1.0)
- FCKeditor,用作富文本编辑器
在symfony1.2中默认状态没有包含任何JavaScript框架,开发者必须手动选择并添加JavaScript框架。
版本变化和升级
symfony源自于英文单词symphony"交响乐",表示程序间如交响乐般默契配合以臻“自动化程度很高、开发速度不可思议”。也有兼容2005年发布的旧版前身Sensio Frameworksf类名前缀sf的意思
在互联网快速发展的今天,企业之间的竞争越来越激烈。只有以用户为中心,快速响应用户的需求,不断迭代和试错,才能让企业在竞争当中立于不败。市场变化越来越快,拥抱变化才是大势所趋。企业级框架为了适应变化,采取半年一版的快速迭代和一年半一个LTS稳定版的版本发布模式,这样可以在“更快更强”和“长期稳定”之间做一个平衡。
Symfony的升级与安装一样困难。比如Symfony2升级到3.3.0要折腾个两个钟头,因为相关依赖需要重新安装或升级,还要调试修改程序代码。
Symfony2.6到Symfony2.7
Symfony2.7到Symfony2.8
Symfony2.8到Symfony3.4 4
Symfony3.4到Symfony4.4.4
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构建的路由是可以被直接缓存在路由系统中的。
symfony 2.x, 3.x 4.x 使用的是 bin/console cache:warmup 这个命令预热缓存
或者使用cache:clear 这个命令在清除缓存后也会预热缓存
还可以在PHP中启用内置的Opcahce 完成对路由及框架的缓存
也可以使用Memecached和Redis等缓存。
最后再说下,影响一个web 应用访问速度的因素有很多。如果题主是要做API接口的话。和单个模板渲染是不同的优化方式
第一次运行慢主要是框架在生成缓存文件。
对于Symfony3以上版本可以使用php bin/console cache:warmup 命令预热缓存
优点
深度解耦。它的解耦体现在很多方面,比如它会把程序封装为各个Bundle,耦合程度进一步降低。
极度灵活。它的灵活体现在很多方面,单纯就配置文件的格式来说就可以使用yml格式、xml格式、php格式等等。
功能强大。它支持非常多的功能,而且封装的比较彻底,几乎包含了你开发生命周期所需要的一切,web开发工具栏,高度的封装,完善的测试,还有强大的命令行等等,就和Emacs一样,你以为它只是个框架,其实它是伪装成框架的IDE。也因此它的响应速度会比功能简单的CI、ThinkPHP慢。
- 兼容并包,借鉴了JAVA、Python等编程思想,成为公认的框架典范。
某种意义上,Symfony是对PHP的救赎:Symfony类似于一个PHP领域的“中台”。前端技术快速变革,而服务器端脚本PHP一度停滞不前,从Symfony2开始,一个划时代的PHP框架诞生了,它以面向服务为核心,首创了PHP框架中的可复用组件和至今无人能出其右的Extension架构,榨干弱类型PHP的面向对象特性,活用所有Design Pattern,以“不向下兼容”的无畏神勇和超前预见——重写了整个框架,成为PHP业界“事实上的标准”。PHP7之后的Symfony3也愈发强大,JS采用TypeScript转向真正企业级OOP和“模块化”大规模开发。
Symfony与许多关系型数据库集成的也非常好,成本也较小。
便于后期维护和扩展,只要这个框架支持composer一般都能支持扩展,这也意味着你可以不用反复造轮子,只要有能用的引用安装就行了,完全告别原来那种到处找类库的烦恼了。
当然要说优点还是有很多的,比如扩展性强等等,但是作为一个流行框架,扩展性一般都不会差到哪里去。
虽然学起来困难,但是物有所值。因为语言的学习是相通的,比如先学会了C,再学Java,.net等其他语言就能触类旁通,反而节省了时间。是不是就简单多了?学了Symfony,再学Yii2/Laravel就轻松了。而且优秀的现代框架之间思路也是大同小异,只在少许的语法和模板上不同。学了Symfony,再学.net mvc, java SSH等就容易了。
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)
开发环境搭建
使用PHP内置的CLI-Server
使用Vagrant搭建完整开发环境:scourgen/Vagrant-PHP-Stack:VirtualBox下Vagrant开发环境资源;使用IT基础架构自动化Puppet 项目
搭建共享开发服务器
安装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。