第七话:
控制器
我们知道,控制器的作用主要就是根据用户的输入调用相应的模型和视图去完成用户的请求。控制器本身通常不输出任何东西,它接受用户请求并决定调用哪个模型去处理,以及由哪个视图来显示模型处理之后返回的数据。
因为源自Struts的思想,所以
ThinkPHP沿袭了Struts的Action控制器,在这个过程中有一个类是非常重要的,就是App应用程序类,这个类好比是ThinkPHP的中央处理器,完成了包括解析用户请求、地址转发、模块和操作调度等过程,在完成模块调度后,App类就把控制权交给Action控制器,控制器执行完毕再把控制权交还给App。
ThinkPHP的控制器类命名并不是以Controll命名,每个模块在
框架中对应一个Action类
文件,而每个操作就是Action类中的一个方法,例如UserAction就表示用户控制器类,而UserAction类中的方法就是对应的某个操作,方法操作的命名也不需要加Action后缀,这一点对于有些新手尤其要注意的,不要和zf之类的框架相混淆。
系统会根据模块名称自动寻找
项目类库Action目录下面的相关类,如果没有找到,会在加载的插件中寻找是否存在该模块插件,如果依然没有,则抛出异常。找到模块类后,就判断是否存在操作方法,如果没有会尝试寻找插件操作方法,如果依然不存在,那么会寻找是否存在自动匹配的模版文件。如果存在模版文件,那么就直接渲染模版输出。
关于ThinkPHP如果响
应用户的地址输入和转发,请参考URL路由一文所描述的内容。
在完成调度后,就进入具体的操作处理逻辑。控制器类提供了很多内置的默认操作方法,你只需要
定义自己的业务方法,并且可以实现模块和操作的隐含执行、前置和后置操作、重定向等功能,为应用快速开发提供了有力的保证。