Symfony是一個基于MVC模式的面向?qū)ο蟮腜HP5框架,它可以幫助你將web應(yīng)用程序的業(yè)務(wù)邏輯、服務(wù)器端邏輯和頁面顯示分開。它也包含了許多的工具和類,這些工具和類可以幫助你縮短開發(fā)復(fù)雜web應(yīng)用程序的時間。
Symfony是國外最流行的PHP開發(fā)框架,近年來Symfony正以迅雷不及掩耳之勢迅速占據(jù)國內(nèi)PHP開發(fā)框架的市場份額,鑒于symfony2高度重視業(yè)務(wù)邏輯、代碼易讀、維護(hù)輕松,能大大提升團(tuán)隊(duì)的開發(fā)效率,提高代碼性能,現(xiàn)在Symfony2框架已成為大型互聯(lián)網(wǎng)公司的首選框架。
功能介紹
路由
能限制hostname,這就讓有大量公共功能的網(wǎng)站可以共用一套代碼。URI 識別支持 Reg 檢測,讓 url 能定義的隨心所欲。支持前綴,import,便于模塊化。
Twig模板
這是我最喜歡的一個組件。它提供了一套不同于 php,但非常適合處理復(fù)雜網(wǎng)站結(jié)構(gòu),頁面結(jié)構(gòu)的語法。extension 很方便也很強(qiáng)大,通用的操作通過 extension 能很好的表達(dá),比如需要緩存頁面的某個模塊到 redis ,寫一個 ViewExtension,就能在模板里面用一個方法來緩存特定模塊了,非常方便,代碼也很容易管理。
composer包管理
讓代碼的依賴關(guān)系變得很清晰。而且現(xiàn)在第三方有很多不錯的 bundle,比如抽象 redis 的 snc/redis-bundle,處理圖片的 liip/imagine-bundle,第三方登錄的 hwi/oauth-bundle 等等等等。隨著自己項(xiàng)目的逐漸成熟,也可以把項(xiàng)目對 Symfony 的定制獨(dú)立出來用 composer 來管理,感覺挺不錯的。
Event、Listener和Services
非常方便的全局功能處理。惹人討厭的是配置起來很麻煩,我用的是 yml 配置文件,為了找對路的語法真是掉了一層皮。
Doctrine ORM
一個好處是不用去糾結(jié)于數(shù)據(jù)庫的細(xì)節(jié),而只需仔細(xì)的設(shè)計(jì)需要持久化的對象。對象之間的關(guān)系可以自由設(shè)計(jì),從生成數(shù)據(jù)庫結(jié)構(gòu)到生成查詢語句的過程都不用再操心了。另一個好處是查詢的時候,可以不用 sql,dql 這種依賴字符串來表達(dá)的查詢,而采用對象式,sql 因?yàn)槭菃渭兊淖址麄€查詢邏輯的控制用代碼表達(dá)起來很麻煩。
Form組件
Symfony 提供了 form 生成,提交以及驗(yàn)證的功能。組件抽象了三個方面的東西:formType 來維護(hù)需要填寫保存的值,formTheme 來定義表單的 html 結(jié)構(gòu),以及 validation 提供數(shù)據(jù)驗(yàn)證的功能。這個組件的缺點(diǎn)也很明顯,概念太復(fù)雜了,如果遇到要自己定義一個 field,簡直就是自找麻煩。
性能
Symfony 提供了一個極好的組件叫 profile,能以圖形化的形式顯示各個部分代碼執(zhí)行的時間,消耗的內(nèi)存,還有數(shù)據(jù)庫查詢的語句,查詢的行數(shù),用到的索引的。配合這個工具來優(yōu)化代碼,可以讓網(wǎng)站跑得飛快。