ThinkPHP的控制器是一个类,接受用户的输入并调用模型和视图去完成用户的需求;控制器层由核心控制器和业务控制器组成,负责应用的调度控制,而业务控制器则由用户定义的控制器类完成。
本教程操作环境:Windows7系统、thinkphp v5.1版、Dell G3电脑。
ThinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计。
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
控制器(Controller)层
ThinkPHP的控制器是一个类。
ThinkPHP的控制器层由核心控制器和业务控制器组成,核心控制器由系统内部的App类完成,负责应用(包括模块、控制器和操作)的调度控制,包括HTTP请求拦截和转发、加载配置等。业务控制器则由用户定义的控制器类完成。多层业务控制器的实现原理和模型的分层类似,例如业务控制器和事件控制器:
Controller/UserController //用于用户的业务逻辑控制和调度
Event/UserEvent //用于用户的事件响应操作
访问控制器 Home/Controller/UserController.class.php 定义如下:
namespace Home\\Controller;use Think\\Controller;class UserController extends Controller{}
事件控制器 Home/Event/UserEvent.class.php 定义如下:
namespace Home\\Event;use Think\\Controller;class UserEvent extends Controller{}
UserController负责外部交互响应,通过URL请求响应,例如 http://serverName/User/index,而 UserEvent负责内部的事件响应,并且只能在内部调用:
A(‘User’,’Event’);
默认的访问控制器层是Controller,我们可以调整设置如下:
‘DEFAULT_C_LAYER’ => ‘Event’, // 默认的控制器层名称改为Event
所以是和外部隔离的。
多层控制器的划分也不是强制的,可以根据应用的需要自由分层。控制器分层里面可以根据需要调用分层模型,也可以调用不同的分层视图(主题)。
在MVC三层中,ThinkPHP并不依赖M或者V,甚至可以只有C或者只有V,这个在ThinkPHP的设计里面是一个很重要的用户体验设计,用户只需要定义视图,在没有C的情况下也能自动识别。