欢迎交流。
回复内容:
主要是提高了代码的抽象级别。相对于简单的,直接暴露底层概念的 PHP 语言,Symfony 提供了一套解决特定工程问题的概念和工具,帮助广大的 Coder 的减少重复性工作。抽象化意味着能用更简洁的东西表达复杂的概念,流程等。
Symfony 已经写了一年多了,对我来说的好处,是让我明白了“有各种各样的方式来简练代码”,“简练的代码的诸多好处“,以及”到底简练了什么东西“。
Symfony 一些介绍:- 路由:能限制 hostname,这就让有大量公共功能的网站可以共用一套代码;URI 识别支持 Reg 检测,让 url 能定义的随心所欲;支持前缀,import,便于模块化。
- Twig模板:这是我最喜欢的一个组件。它提供了一套不同于 php,但非常适合处理复杂网站结构,页面结构的语法。extension 很方便也很强大,通用的操作通过 extension 能很好的表达,比如需要缓存页面的某个模块到 redis ,写一个 ViewExtension,就能在模板里面用一个方法来缓存特定模块了,非常方便,代码也很容易管理。
- composer包管理:让代码的依赖关系变得很清晰。而且现在第三方有很多不错的 bundle,比如抽象 redis 的 snc/redis-bundle,处理图片的 liip/imagine-bundle,第三方登录的 hwi/oauth-bundle 等等等等。随着自己项目的逐渐成熟,也可以把项目对 Symfony 的定制独立出来用 composer 来管理,感觉挺不错的。
- Event,Listener 和 Services:非常方便的全局功能处理。惹人讨厌的是配置起来很麻烦,我用的是 yml 配置文件,为了找对路的语法真是掉了一层皮。
- Doctrine ORM:一个好处是不用去纠结于数据库的细节,而只需仔细的设计需要持久化的对象。对象之间的关系可以自由设计,从生成数据库结构到生成查询语句的过程都不用再操心了。另一个好处是查询的时候,可以不用 sql,dql 这种依赖字符串来表达的查询,而采用对象式,sql 因为是单纯的字符串,整个查询逻辑的控制用代码表达起来很麻烦。
- Form组件:Symfony 提供了 form 生成,提交以及验证的功能。组件抽象了三个方面的东西:formType 来维护需要填写保存的值,formTheme 来定义表单的 html 结构,以及 validation 提供数据验证的功能。这个组件的缺点也很明显,概念太复杂了,如果遇到要自己定义一个 field,简直就是自找麻烦。
- 性能:Symfony 提供了一个极好的组件叫 profile,能以图形化的形式显示各个部分代码执行的时间,消耗的内存,还有数据库查询的语句,查询的行数,用到的索引的。配合这个工具来优化代码,可以让网站跑得飞快。
性能不是问题,优化的空间非常大,但你至少的是常读源代码的这个级别才能让它的性能上得了台面。学习成本高也是个问题,类似于学习 vim 的感觉,熟悉起来非常美好,不然的话...
资料:
这两天把symfony2框架看了一遍,现在终于领会到laravel的设计思想了~~~laravel 和 symfony 在架构和核心功能上,基本上是一模一样的~~不存在谁更强大之说~~
但是laravel 有两点不同,第一个语言优美,第二个out of box,它是以用户为中心的,偏向黑盒,比较像苹果的风格,就像苹果手机;
symfony2 偏向白盒,架构清晰灵活,但是非常复杂繁琐~~你需要自己做很多轮子,好处就是轮子都可以很轻松调试,有点像windows的企业版。
symfony2 是非常值得学习的框架,如果你玩了一段时间laravel,需要对内核架构更加深入理解,可以看看symfony2,laravel很多核心概念就是从那里来的。
但是有些设计思想上,symfony反而感觉没有laravel奔放,比如说表单,,symfony搞了一套自以为是非常完整的表单系统,MVC全部打包了。 laravel的表单就很灵活,全部拆分了,甚至后来放弃了V的部分~~普通程序员第一次看到symfony的表单系统常常会吐血身亡。
还有annotation,总感觉是旁门左道,,不正规,现在也没感觉到它的好处,可能是还没用习惯吧。
刚用symfony2做完了三个项目
其中一个使用了sylius bundle,之前使用过codeignitor, yii, zend, drupal, joomla, wordpress做过几十个项目,自从用了symfony2之后,再也不想回到之前的框架里面了,当然drupal8集成了symfony2核心的bundle,一直等待着快快发布。使用symfony2之后让我重新找到了写代码的乐趣,精简,快速,优美,当然有个问题就像上面的一个哥们说的一样,完全对数据库进行了抽象,都需要接触phpmyadmin了,通过doctrine可以自动同步数据库,当然带来的问题是性能方面的问题,无法针对性的进行优化。但是symfony2提供的cache完全可以让网站飞快的运转起来,比起性能更加重要的是能够作出自己想要的东西,性能是之后可以慢慢调试优化的。
另外还有一个对我们来说的一个不是太大的缺点:中文资料相对有限。但是相信通过我们这些点滴的讨论会让资料不断的丰富起来。在做上面的几个项目的时候基本上是在英文社区里面得到的支持。
还有一个问题是,里面的一些概念理解起来比其他的框架稍微有些难度,比如events,services,security,依赖注入,当然这也是强大的背后要付出的一些代价。
优点是强大,缺点是太强大。。。
原来1.0性能不行,据说2.0性能提高很多,可以试试。
优点:像java
缺点:像java
缺点就是太重,学习曲线太陡峭,性能真行不高,中文资料太少,主要的以法文为主,英文其次。另外由于年头早,语法相对陈旧(这就是为啥说laravel好的原因,年头新,用了很多新技术)。
优点就是现成的组件足够多,海量而且开源,重用模式设计的比较精巧,功能足够全面。
第三方bundle的问题是,每个bundle的学习成本也并不低。虽然开源,但实际上比较难改动。而且由于历史原因,很多bundle都有兼容问题。
我现在主要是用sonata系列的组件用于快速建立admin管理平台使用,这部分用熟悉了,能让后台开发效率达到极致,暂时没有发现能够让开发速度更快的可能。需要性能的接口部分使用另一个框架phalcon来处理。
优点:
学会以后强大异常,基本我现在web项目都用 sf2.
缺点:
学习难度存在,三两个项目实战下来才熟悉当中常用组件。
如果学习sf2,官网的Best Practice一定要看,框架自带的实现方式未必最好,比如前端构建我还是喜欢用grunt,AsseticBundle基本不用
没用过sf2, 刚看他的文档,如果用过springMvc 就理解容易看的懂了
优点: full stack freamwork, powerfully code-generation tools!! based on the premise of convention over configuration.
就我自己的经验来说, Symfony在项目开发上的方便性, 敏捷性和可扩展性, 目前在PHP Freamwork里数一数二, 再加上其强大的第三方插件库和活跃的社区.
缺点: 学习曲线. 要完全搞懂Symfony的设计, 至少花一星期时间研究手册和代码
性能. Symfony1.4和Doctrine1.2结合使用, 高并发下的性能是个问题. 虽然在Symfony2和Doctrine2下已经得到很大的解决.... 但那是另一个话题了.... =_=
PHP最好的框架就是Symfony,很多phper不会用,因为缺少必要的大型web开发的基础知识,比如很多phper连什么是service,event,DI都不知道