# MVC
SF3是基于MVC层次的。MVC层次很好地隔离了一个Web应用的各个不同层面:
* M(odel):模型层,也可以理解为数据库接口层。这个层在PHP对象(类、成员)和数据库结构(表格 、字段)之间建立起一种映射关系。
* V(iew):呈现层,或者叫展示层。我们可以简单地将其理解为我们在Web浏览器中看到的一个一个页面。
* C(ontroller):控制层。它回到这样一个问题:页面中的内容(特别是动态内容)应该从哪里来?
SF3官方文档中有这么[一张图](http://symfony.com/doc/current/book/http_fundamentals.html):
![](https://box.kancloud.cn/932328a5d21efd3113d0c217eaf70a3a_690x273.png)
这里出现了C和V的代表,如`Front Controller`,`Controller`,`Response`等。没有出现的是M的代表。所以我们可以基于这张图来加以扩展:
![](https://box.kancloud.cn/d8224d98d16788dd926b3e8819288da6_1211x552.png)
这张图中的`Entity: blog`就是个M。在实际应用中,它应该是一个表格,保存了所有的blog的记录。某一个控制层的控制器(比如`blogAction`)向`blog`这个实体进行查询和其它操作。根据操作的不同,`blog`这个实体可能返回所有博客的列表,或者是经过筛选、排序过的列表等,也可能是CRUD中其它的操作。
重要更新:在之前的开发中,笔者都采用了标准的MVC模式。而在最新一次的升级开发中,笔者采用了更灵活、更去耦合化的方式。
![](https://box.kancloud.cn/a1a6e7590609d97a68ce6b6479dc4ed3_1086x565.png)
在图示中我们看到,一个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 结语