请问前辈的一些symfony2的使用心得,本人刚学习symfony2,想走一下捷径,我有两个问题, 1,学习symfony2那些是必须学,那些是作用不大,我希望能听一下前辈们的使用心得 2,安装完symfony2后,你们通常会安装使用那些bundle? 谢谢
習慣沉默2017-05-16 16:47:01
所以,建议你,用得上什么用什么。
另外,仅建议符合下面条件的个人或团队使用Symfony 2:
世界只因有你2017-05-16 16:47:01
1、symfony2这种量级的框架怎么可能有捷径可走?其定位是松藕合和易扩展,并不是很容易的事。sf2是靠configuration系统(它可以把各种语义化yml配置转为数组)和服务容器概念来实现的bundle的分发,因此其灵活强大的extension架构,并非口头说的那么简单,用起来也有门槛,你不得不使用compiler pass来对各种依赖实施特殊注入。而这一块正是其他php框架难以超越sf2的关键所在。
对symfony2来说,理论与实践同样重要,一般来说一年之内很难入门,需要两三年才能入门。而且英语必须,爬出必须。
现在的symfony2因为表现出色,已经逼得zend framework3不得不重新包装、重新推出。因此如果你想扎实掌握现代php开发,应该从底层,也就是http、request、response这些角度,来理解究竟sf2 component中的kernel/httpkernel是怎样运作的?然后才是其他的组件和功能。这其中,“事件”组件是极其重要的,event_dispatcher也是sf2的灵魂。官方几本2.6版的pdf全部下载,每本都是400页,里面30来个组件,按我的理解一个也绕不开,外加doctrine的400页,和twig的160页。最好找1毛1页的打印店,全部打出来装订上,以备随时参阅。
不过,2.7版有重大变化,因为是承上启下的,直接对接3.0。尽管如此,2.6还是有必要全面掌握。2.7/2.8是向下兼容并长期维护的,再往上就不兼容了。
当你能够使用symfony2开发东西时,你的项目自然是最好的,至少你不会也没有必要再羡慕其他任何web开发语言的框架。symfony2生成东西是很快的,页面本身也是可以定制和扩展的。无论是表单环节还是会员环节(即开发中绕不开的安全验证/角色授权),都可以自动化,真的是非常简单,不需要太多关注(当然sf2-form和sf2-security的原理一定要懂,里面有很多概念,比如transform或是voter都是必须掌握的)。如果使用ORM很多东西确实与传统web开发不太一样,比如Django的Admin在symfony2中有更完美解决方案,强大到令人不可思议。
2、knpbundles.com第一页的前10个,全部要装,都会用到。其他还有很多,因为在symfony哲学里是不可以随便发明轮子的。比如,Guzzle,Geshi,Geocoder等第三方的包,不一定非得是被好心人封装成bundle,随便任何一个library(乃至Zend2中你喜欢的库),你可以原封不动的扔到Vender中,利用symfony2提供的自动加载,立即使用。至于像是google map、fckeditor、markdown等常用工具皆早已被封装成bundle直接composer下载。
说到composer,大家应该明白,正是symfony2的刚需促成了composer的诞生。不过现在sf2本身的安装已经不利用composer了,只有bundle会用。composer.phar的核心就是symfony2的console component。
接楼上观点回几句:按我的理解,sf2是可以有两种玩法,一个是少数精锐,做出大网站;一个是规模团队,做出惊人的web产品。sf2之所以强,就是因为他可以开发出网站以外的“高端互联网产品”(这个面儿很广,大家可以到sitepoint搜symfony2或到官网成功案例中自研,laravel这种只是其一),而做一个网站对sf2来说是不需要太多人的,该框架的底层封装和底层便利,以及具有空前扩展能力和自定义能力的第二方(symfony项目的不少灵魂人物都有自己的bundle,比如FOS、KNP、stof,JMS,sonata这些专家级的)、第三方bundle(世界级的php程序员),可以保证你的项目质量。
难就难在我们是否具备对框架的理解能力和操作能力。如果你会了sf2(主要是DIC、EVENT、FORM、SECURITY这四个是必须精通的,开发过程可以使用annotation来减少代码总量,并减少从controller等php文件往yml文件中切换的次数),你再回过头来看看thinkphp3,你会赞叹tp3相较前代的进步,而如果你查看think的底层代码你会觉得“的确非常简单”,真的。如果sf2上不了手,tp3一样可以用,因为你要完成项目,而不是追求什么高大上。