Symfony2 的優缺點有哪些?

歡迎交流。


主要是提高了代碼的抽象級別。相對於簡單的,直接暴露底層概念的 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 - 標籤


剛用symfony2做完了三個項目

其中一個使用了sylius bundle,之前使用過codeignitor, yii, zend, drupal, joomla, wordpress做過幾十個項目,自從用了symfony2之後,再也不想回到之前的框架裡面了,當然drupal8集成了symfony2核心的bundle,一直等待著快快發布。使用symfony2之後讓我重新找到了寫代碼的樂趣,精簡,快速,優美,當然有個問題就像上面的一個哥們說的一樣,完全對資料庫進行了抽象,都需要接觸phpmyadmin了,通過doctrine可以自動同步資料庫,當然帶來的問題是性能方面的問題,無法針對性的進行優化。但是symfony2提供的cache完全可以讓網站飛快的運轉起來,比起性能更加重要的是能夠作出自己想要的東西,性能是之後可以慢慢調試優化的。

另外還有一個對我們來說的一個不是太大的缺點:中文資料相對有限。但是相信通過我們這些點滴的討論會讓資料不斷的豐富起來。在做上面的幾個項目的時候基本上是在英文社區裡面得到的支持。

還有一個問題是,裡面的一些概念理解起來比其他的框架稍微有些難度,比如events,services,security,依賴注入,當然這也是強大的背後要付出的一些代價。


這兩天把symfony2框架看了一遍,現在終於領會到laravel的設計思想了~~~laravel 和 symfony 在架構和核心功能上,基本上是一模一樣的~~不存在誰更強大之說~~

但是laravel 有兩點不同,第一個語言優美,第二個out of box,它是以用戶為中心的,偏向黑盒,比較像蘋果的風格,就像蘋果手機;

symfony2 偏向白盒,架構清晰靈活,但是非常複雜繁瑣~~你需要自己做很多輪子,好處就是輪子都可以很輕鬆調試,有點像windows的企業版。

symfony2 是非常值得學習的框架,如果你玩了一段時間laravel,需要對內核架構更加深入理解,可以看看symfony2,laravel很多核心概念就是從那裡來的。

但是有些設計思想上,symfony反而感覺沒有laravel奔放,比如說表單,,symfony搞了一套自以為是非常完整的表單系統,MVC全部打包了。 laravel的表單就很靈活,全部拆分了,甚至後來放棄了V的部分~~普通程序員第一次看到symfony的表單系統常常會吐血身亡。

還有annotation,總感覺是旁門左道,,不正規,現在也沒感覺到它的好處,可能是還沒用習慣吧。


優點是強大,缺點是太強大。。。

原來1.0性能不行,據說2.0性能提高很多,可以試試。


優點:

學會以後強大異常,基本我現在web項目都用 sf2.

缺點:

學習難度存在,三兩個項目實戰下來才熟悉當中常用組件。

如果學習sf2,官網的Best Practice一定要看,框架自帶的實現方式未必最好,比如前端構建我還是喜歡用grunt,AsseticBundle基本不用


優點是很強大,雖然學起來很費勁,缺點是招不到人,找不到工作.


優點:

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下已經得到很大的解決.... 但那是另一個話題了.... =_=


沒用過sf2, 剛看他的文檔,如果用過springMvc 就理解容易看的懂了


PHP最好的框架就是Symfony,很多phper不會用,因為缺少必要的大型web開發的基礎知識,比如很多phper連什麼是service,event,DI都不知道


怎麼說那,這個就像是Spring一樣方便易用,但是也很重,但是絕對是好東西,推薦學習下,開發起來非常非常爽。


準備入手symofony,想想還是有點小激動的。


缺點就是太重,學習曲線太陡峭,性能真行不高,中文資料太少,主要的以法文為主,英文其次。另外由於年頭早,語法相對陳舊(這就是為啥說laravel好的原因,年頭新,用了很多新技術)。

優點就是現成的組件足夠多,海量而且開源,重用模式設計的比較精巧,功能足夠全面。

第三方bundle的問題是,每個bundle的學習成本也並不低。雖然開源,但實際上比較難改動。而且由於歷史原因,很多bundle都有兼容問題。

我現在主要是用sonata系列的組件用於快速建立admin管理平台使用,這部分用熟悉了,能讓後台開發效率達到極致,暫時沒有發現能夠讓開發速度更快的可能。需要性能的介面部分使用另一個框架phalcon來處理。


推薦閱讀:

PHP網站中保持登錄狀態的功能是怎麼做的?
網頁前端和後台人員都是如何看待全棧工程師的?
如何成為一個優秀的 PHP 工程師?
待進階的phper 想要通讀一個開源項目源碼,應該研究哪個較好?
對於PHP程序初學者來說,有沒有比較好的開源項目適合學習和深入的呢?

TAG:PHP | PHP框架 | Symfony |