簡介
簡單的模闆功能symfony是一個開源的PHP Web框架。基于最佳Web開發實踐,已經有多個網站完全采用此框架開發,symfony的目的是加速Web應用的創建與維護。
同時,它還包含了很多工具和類用以縮短開發複雜的網絡應用的時間。
特點
它的特點如下:
1.簡單的模闆功能。
2.緩存管理。
3.自定義URLs。
4.搭建了一些基礎模塊。
5.多語言與I18N支持。
6.采用對象模型與MVC分離。
7.Ajax支持。
8.适用于企業應用開發。
框架
新機制
一個框架結構在編程語言之上加入了新的機制,并且這些機制能夠為許多特定的目标自動提供一些開發模式。一個框架結構同樣為編碼增加了結構,并且促使程序員編出更好、更易讀的、有持續性的代碼。一個框架結構能讓編程變得更加簡單,因為它把複雜的程序封裝成了簡明的陳述。
一個框架的發展通常是以它所使用的語言所延伸出來的。一個php5框架是由一系列的用php5寫成的文件組成的。
層次
一個框架将為應用劃分出層次。從整體上來說,它可以将應用分為三個層次:
◆表現邏輯層(presentation logic)用于處理用戶與軟件之間的交互
◆數據源邏輯層(data source logic)提供了一個數據庫同其他數據提供者的聯系通道。
◆範圍邏輯層(domain logic),或者叫事務邏輯層(business logic),這是剩餘的部分。它包括關于輸入的計算、處理表現層中的數據,以及根據從表現層收到的指令分派調度數據源邏輯層。
網絡應用框架
網絡應用框架緻力于促進網絡應用的開發(websites,intranets,等等)。建立一個基本的動态網站可以從現有的編程語言中輕易的實現,而PHP的知名就是由于它的簡易性被廣泛的應用。隻需要php,就可以查詢數據庫、管理會話(session,cookies)、訪問服務器端文件等等。而當需要構建一個更加複雜的站點,當事務邏輯大大的增加了用于維護的編碼量的時候,就需要一個網絡應用的框架出現了。
優點
無論是一個php5的專家還是一個在網絡應用編程方面的新手都沒有問題,影響決定的最主要因素是項目的大小。
如果隻是想要開發一個簡易的5-10頁的站點,隻需要有限的訪問數據庫和幾乎不考慮性能、可用性或文檔,那麼隻需要單獨使用PHP。将不會從網絡應用的框架結構的特征中獲的太多的益處,使用面向對象或MVC模式隻會使開發變慢。Symfony運行在一個隻有CGI支持的共享主機上将不會高效優異的運行。
另一方面,如果開發大型的web應用,其中有大量的事務邏輯,那麼單獨使用PHP是不夠的。如果計劃将來維護和擴展應用,需要編寫輕量級、易讀的和高性能的的代碼。如果想直接使用最友好的用戶交互界面(AJAX),不能隻寫上數百行的Javascrīpt代碼。如果想享受并且快速的開發,那麼單獨使用PHP将是令人失望的。介于上述這些原因,symfony非常合适。
當然,如果是一個專業的web開發人員,已經知道了web應用框架的所有優點,并且需要一個成熟的,具有詳細文檔和一個大的團體支持。那麼不要再猶豫,symfony就是解決方案。
特性
Symfony是一個完整的框架結構,設計用來幫助并加速網絡應用的開發。
所包涵的觀念
它是基于以下的一些觀念的:
*盡可能的兼容更多的開發環境
*易于安裝和配置
*簡單易學
*企業級應用
*規定而非配置,支持回調
*在大多數情況下簡潔明了,但是有足夠的彈性為複雜情況做準備
*包含大多數網站的共性
*适應大多數web“最佳實踐(best practices)”和web“設計模式(design patterns)”
*非常易讀的代碼、輕松維護
*開源
這些主要的基本概念突出了symfony的框架是使更多的公共任務自動完成,以使開發人員能夠完全專注于一項應用任務的特殊細節所在。而在每次一個新的web應用建立的時候不需要重新反複勞動。
兼容的數據庫
為了實現這些需求,symfony完全由PHP5寫成。它已經徹底的在各種現實項目應用中被測試過,并且實際上已經應用于一些高要求的電子商務網站。它可以同大多數現有的數據庫兼容,具體如下:
*MySQL
*PostgreSQL
*Oracle
*MSSQL
*和其他數據庫(如果安裝了Creole驅動)
結構
symfony的對象模型依賴于以下三個獨立的層:
*數據庫抽象層(a database abstraction)
*對象關系映射層(an object-relational mapping)
*用于負責前台顯示和後台事務的模型-視圖-控制器模式層(a Model-View-Controller model for the front and back-office)
開發環境和捆綁
另外為了滿足企業已有的編碼規範和項目管理規則,symfony可以全部重新用YAML配置文件。它是默認提供的幾個開發環境,和捆綁:
*原型(prototyping)
*内容管理(content management)
*live configuration changes
*部署(deployment)
*單元測試(unit testing)
*應用測試(applicative testing)
*日志記錄(logging)
*調試(debugging)
應用開源項目
Symfony用到了其他一些開源項目的代碼:
*Creole,用于數據庫抽象層(for the database abstraction layer)
*Propel,用于對象關系映射層(for the object-relational mapping layer)
*Mojavi,用于MVC模型層(for the Model-View-Controller model layer)
web項目的公共特性
web項目的公共特性可以輕易的由symfony自動得到:
*國際化(internationalization)
*模闆和助手(templating with helpers)
*表單确認(form validation)
*緩存管理(cache management)
*購物車管理(shopping cart management)
*簡潔的路徑(smart URLs)
*scaffolding
*發送郵件(email sending)
*分頁(Pagination)
*AJAX交互(AJAX interactions)
贊助
Sensio是Symfony的贊助商,它是一家法國Web代理商。起先Symfony使用Sensio Framework作為該項目的名字,因此代碼中所有的類名前都加上了"sf"前綴,當它決定以開源形式發布時,便以Symfony作為名稱(Symfony的英文縮寫也是sf)。