php.MVC框架由许多类组装而成,但是我们不必了解所有类的详细工作过程也可以使用这个框架,图2显示了我们使用该框架需要了解的一些核心组件。
图2
从图2我们可以看到一个典型的Web浏览器的HTTP请求如何与我们应用程序框架的核心类进行交互,然后如何得到HTTP响应返回到Web浏览器。
现在,让我们以一个实例来了解框架的处理流程。比如要查看公司销售报表,先在浏览器地址栏输入
http://www.myhost.com/mycompany/Main.php?do=salesReport 客户端便发送给php.MVC应用程序一个请求。应用程序框架的控制器处理这个请求,分析查询字符串,取出请求路径关键字。在这个实例中,路径为salesReport。后面我们将看到如何通过XML配置文件来配置必需的应用行为,绑定表单验证,业务逻辑处理和显示组件。
如果我们想严格控制只有通过验证的人才能访问这个报表,则用户必须先输入基本的验证信息,通常是用户名和密码。为了限制只有通过了验证的用户才能访问该报表,这里用了一个被称作ActionForm的类,我们需要继承框架的ActionForm来定义自己的表单验证类,比如SalesActionForm,如下所示:
class SalesActionForm extends ActionForm { ... }.
在SalesActionForm类里我们要检查用户是否可信任的以决定下一步动作。如果用户没有通过验证,我们将重定向到初始页面要求重新输入;如果他通过了验证,控制器会通过Action类来调用业务处理类。
我们通过继承框架Action类来进行自定义,比如SalesAction,如下所示:
class SalesAction extends Action { ... }.
在XML配置文件中我们要定义请求与Action类的对应关系,这样控制器找到相应的Action类,这里调用SalesAction。在SalesAction类里我们能访问业务处理类和数据源。本例中我们从数据库中取得销售数据,制成报表格式。例如:我们创建一些对象,后面在销售报表模板中可以使用这些对象,如下所示:
// Sales report items - per zone (individual object instances):
$item1 = new Item('Northern Zone Sales' , $salesNorth);
$item2 = new Item('Southern Zone Sales' , $salesSouth);
...
当我们完成了销售报表,就要通过控制器指定显示组件显示出来。这是通过一个在XML配置文件中已经配置好的被称作Forward的对象的来完成,如下所示:
return $mapping->findForwardConfig('salesReportSuccess');
Forward对象包含了销售报表模板的路径,比如salesReport.tpl,这也是在配置文件中定义。
然后控制器将请求转向到ActionDispatcher,由它定向到指定的显示组件,在本例中是salesReport.tpl,在模板中通过访问先前定义对象和变量从而得到在SalesAction里准备好的数据。
下面显示我们如何用phpTAL模板系统访问报表数据并生成显示视图,对象$item1我们用类变量$item1->value
...
<!-- // Sales report items - per zone (individual object instances): -->
<table class='salesTable'>
<tr>
<td class='salesItemDesc' tal:content="item1/salesNorth">
Sales report->value will appear here</td>
...
最后将处理结果通过HTTP发送到客户端浏览器,从而也就完成了整个处理过程。