# MVC
SF3是基于MVC層次的。MVC層次很好地隔離了一個Web應用的各個不同層面:
* M(odel):模型層,也可以理解為數據庫接口層。這個層在PHP對象(類、成員)和數據庫結構(表格 、字段)之間建立起一種映射關系。
* V(iew):呈現層,或者叫展示層。我們可以簡單地將其理解為我們在Web瀏覽器中看到的一個一個頁面。
* C(ontroller):控制層。它回到這樣一個問題:頁面中的內容(特別是動態內容)應該從哪里來?
SF3官方文檔中有這么[一張圖](http://symfony.com/doc/current/book/http_fundamentals.html):

這里出現了C和V的代表,如`Front Controller`,`Controller`,`Response`等。沒有出現的是M的代表。所以我們可以基于這張圖來加以擴展:

這張圖中的`Entity: blog`就是個M。在實際應用中,它應該是一個表格,保存了所有的blog的記錄。某一個控制層的控制器(比如`blogAction`)向`blog`這個實體進行查詢和其它操作。根據操作的不同,`blog`這個實體可能返回所有博客的列表,或者是經過篩選、排序過的列表等,也可能是CRUD中其它的操作。
重要更新:在之前的開發中,筆者都采用了標準的MVC模式。而在最新一次的升級開發中,筆者采用了更靈活、更去耦合化的方式。

在圖示中我們看到,一個Controller不再直接和數據庫/實體打交道,換句話說,在Controller中不再直接從數據庫中獲得數據,而是借由一個第三方(當然也是由筆者開發)的RESTful API封裝層從數據庫中獲取數據并返回給調用的Controller。
這么做的好處有不少。
首先,Controller端的代碼極為簡化,統一為“準備參數、發起調用、獲得返回、處理返回、顯示模板”。而其中的調用過程變成單純的調用遠程API。
其次,API的開發和應用本身沒有太大的關聯,基本去耦合。
第三,API本身可以向外開放,獲得復用。
- 引言
- 1 LAMP
- 1.1 安裝虛擬機
- 1.2 安裝Vagrant
- 1.3 安裝Ubuntu
- 1.4 安裝Apache 2
- 1.5 安裝PHP
- 1.6 安裝MySQL服務器
- 1.7 最后的微調
- 1.8 設置一個虛擬主機
- 1.9 一個趁手的IDE
- 2 Symfony 3和重要構件
- 2.1 Symfony 3
- 2.2 Doctrine
- 2.3 Twig
- 2.4 Composer
- 3 Symfony重要概念
- 3.1 MVC
- 3.2 Bundle/包
- 3.3 Route/路由
- 3.4 Controller/控制器
- 3.5 Entity/實體
- 3.6 Repository/倉庫
- 3.7 Template/模板
- 3.8 Test/測試
- 4 藏書管理程序的結構
- 5 創建應用
- 5.1 建立版本管理
- 5.2 建立數據庫
- 5.3 應用結構
- 5.4 建立數據庫實體
- 5.5 樣本數據
- 5.6 路由
- 5.7 模板
- 5.8 開始編寫首頁
- 5.9 書籍詳情頁面
- 5.10 書籍列表頁面
- 5.11 書籍搜索
- 6 用戶和后臺
- 7 結語