php前端控制器三

2021年09月15日 阅读数:5
这篇文章主要向大家介绍php前端控制器三,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

控制器(Controller)由一些类组成,根据预先定义的配置选项处理用户请求。一个典型的用户请求以下:
http://www.myhost.com/mycompany/Main.php?do=salesReport.

php.MVC 控制器由两部分组成:前端控制器和控制器。当请求到来时,前端控制器负责安装应用程序,控制器则根据phpmvc-config.xml的配置属性处理请求。

图6显示了前端控制器的主要任务。php

php前端控制器三_mvc


用户请求被Main.php文件接收,这里,将设置一些初始化参数。前端控制器将执行如下任务:

定义应用程序路径:这将指定php.MVC类库以及Web应用程序的路径,以下:
$appServerRootDir = 'C:/WWW/phpmvc-base';
$moduleRootDir = 'C:/WWW/mycompany';
定义应用程序的ActionDispatcher:咱们一般须要扩展框架ActionDispatcher来定义本身的Dispatcher类:
$actionDispatcher = 'MyActionDispatcher';
初始化应用程序类路径:为了将类和资源装入,前端控制器将导入预先定义的全局路径以及应用程序路径。咱们能够在/WEB-INF/ModulePaths.php中设置路径,以下:
$appDirs = array();
...
$appDirs = 'WEB-INF/report_tpl';
$appDirs = 'WEB-INF/report_classes';
包含应用程序类:前端控制器将导入它所须要的类文件,咱们也能够用/WEB-INF/prepend.php文件来有选择性地导入一些特殊的应用程序类文件。以下:
include_once './WEB-INF/mytools/MyTools.php';
配置应用程序:前端控制器将为应用程序设置配置信息,好比咱们先前定义的ActionDispatcher。
初始化控制器:前端控制器如今将建立一个应用服务器实例(ActionServer)。
导入配置信息:前端控制器如今将导入应用程序配置信息,假如phpmvc-config.xml从最后一次请求后被修改了,phpmvc-config.xml文件将被从新处理并将数据缓存到/WEB-INF/phpmvc-config.data中。
初始化HTTP请求:前端控制器如今将设置HTTP请求并添加请求属性。
调用应用程序控制器:前端控制器如今已经完成了准备工做,将会把处理权交给控制器。
控制器接收从前端控制器传来的请求,根据配置属性执行一系列操做。

图7描述了php.MVC控制器的任务。html

php前端控制器三_mvc_02




处理action路径:控制器将根据请求路径识别出关键字,选择一个action映射。好比请求路径为:
http://www.myhost.com/mycompany/Main.php?do=salesReport, action路径就为salesReport。
处理现场:根据须要为当前用户选择一个Locale
处理内容格式:根据须要设置内容格式,默认为text/html。
处理不缓存:根据须要设置不缓存头信息,默认为:
"Pragma", "No-cache"
"Cache-Control", "no-cache"
"Expires", 1
处理预处理任务:能够在自定义的ActionServer子类中覆盖这个方法,执行一些指定的预处理任务。
处理Action映射:控制器将根据请求识别action映射,根据phpmvc-config.xml的相应节点生成action映射对象(ActionConfig),好比:<action path = "salesReport" .../>。
处理角色:检查能执行这个action的全部必须的认证。
处理ActionForm:控制器将根据action映射找到相关联的ActionForm,form-bean就是由action的name属性指定,好比:
<action ... name = "salesReportForm" .../>。
处理Populate:根据请求参数设置ActionForm实例的属性。
验证ActionForm:根据action的validate属性值如:<action validate = "true" .../>,决定是否调用ActionForm的validate()方法。若是validate()返回False(验证失败),控制器将用 action中input属性所指定的显示资源(模板)显示错误,好比:
<action path = "salesReport"
...
validate = "true"
input = reportsIndex.tpl>
假如validate()返回True(验证经过),则将继续处理。处理Forward:控制器检查forward映射的URI是否正常,若是是,继续处理。
处理Include:控制器检查include映射的URI是否正常,若是是,继续处理。
处理Action建立:控制器将建立或获取Action实例来处理这个请求,这是用action的type属性来定义的,好比:
<action path = "salesReport"
type = "SalesReportAction"
...
处理Action执行:控制器如今将调用Action类的execute()方法,好比SalesReportAction->execute(...)。在该方法内,咱们将调用业务处理逻辑类。
处理Action链:控制器将检查是否还有另一个Action须要处理,在应用程序配置文件中,咱们经过ActionChain能定义一系列 Action,为了定义ActionChain,须要为action节点的forward元素添加一个nextActionPath属性,好比:
<action path = "salesReport"
type = "SalesReportAction"
...
<forward
name = "salesReportSuccess"
path = "salesReport.tpl"
nextActionPath = "salesReport2"/>
...
forward元素的path属性是必须项,假如这个特殊的Action没有输出,咱们能够设置path = ""。
处理Action Forward:控制器将转发或重定向到指定的资源,一个forward请求在当前处理器中被处理。RequestProcessor只是把控制权交给ActionDispatcher,那里包含了指定的URI模板。好比:
<forward
name="forward_path
path="forwardRequest"
redirect="false"/>
重定向请求实际是发送给客户端浏览器一个标头响应,而后重定向到一个新的URL。在发送重定向标头信息时当前的处理将当即终止。
<!-- This server -->
<forward
name="redirect_path
path="/MyApp/Main.php?do=newRequest"
redirect="true"/><!-- This server, or a remote server -->
<forward前端