在讲解ActionDispatcher之前,我们先来熟悉一下视图,也叫做模板资源。
在前面我们已经提及在本实例中我们使用简单的页面模板来作为显示组件。这些模板包含一些PHP标签来使用在前面创建的表单数据对象。这种技更多地适合于小型应用,在大型应用程序中,开发者可以使用phplib::OOHForms 或 PEAR::HTML_QuickForm来处理显示。
不管使用哪一种技术,应用程序模板要按照与业务逻辑分离的标准来设计,这样UI就不用学习PHP程序。在本例中,模板没有包含任何业务逻辑代码,只使用预先定义的数据对象。
本例我们使用了两个模板资源,salesReportIndex.tpl是主页,假如我们在处理表单的过程中发现输入错误,我们就在上面显示错误的消息。salesReport.tpl作为简单的公司报表显示预先定义的数据。
在salesReportIndex.tpl页允许用户输入用户名、密码以及角色,在前面我们讲述了怎样在Action类中验证用户权限是否可以访问公司报表。
下面是删减了的salesReportIndex.tpl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Sales Report Index Page</title>
<link rel='stylesheet' type='text/css' href="./style/man.css">
</head>
<body leftmargin='2' topmargin='2' marginwidth='2' marginheight='2'>
<table class='header'>
<tr>
<td align="center">
<font class="pageHeader">Sales Report Index Page</font>
</td>
</tr>
</table>
<h3>Welcome to Our Sales Reporting Page</h3><br>
...
<font color='red'>
<?php
print ($er = $errors->getItemString('report_auth_failed')) ? $er.'<br>': '';
print ($er = $errors->getItemString('logon_username_reqd')) ? $er.'<br>': '';
print ($er = $errors->getItemString('logon_password_reqd')) ? $er.'<br>': '';
?>
</font>
<form action='Main.php?do=salesReport' Method='POST'/>
<table class='' border=1>
<tr>
<td bgcolor='#EFEFEF'>
Username:
</td>
<td>
<input type='text' Name='uname' value='<?php print $form->username ?>' />
</td>
</tr>
<tr>
<td bgcolor='#EFEFEF'>
Password:
</td>
<td>
<input type='text' Name='pword' value='<?php print $form->password ?>' />
</td>
</tr>
<tr>
<td bgcolor='#EFEFEF'>
User Role:
</td>
<td>
<input type='text' Name='urole' value='<?php print $form->userrole ?>' />
</td>
</tr>
</table>
<input type='submit' name='submit' Value='Submit' />
</body>
</html>
这就是一个标准的网页加上一些PHP标签。
首先我们来看一下这几句:
<?php
print ($er = $errors->getItemString('report_auth_failed')) ? $er.'<br>': '';
print ($er = $errors->getItemString('logon_username_reqd')) ? $er.'<br>': '';
print ($er = $errors->getItemString('logon_password_reqd')) ? $er.'<br>': '';
?>
这里我们使用预先定义的错误关键字比如'report_auth_failed'来访问错误信息。假如是一个NULL值,就插入''。这些对象都是通过ReportActionDispatcher来产生的,我们将在后面介绍。
接下来再看看:
<form action='Main.php?do=salesReport' Method='POST'/>
通过前面的介绍相信大家一定能看懂了。
然后就是表单输入标签:"Username"; "Password" 和 "User Role"。我们来看看'Username'域
<input type='text' Name='uname' value='<?php print $form->username ?>'/>
我们看到了一个标准的HTML文本输入框,在value属性里,我们使用了简单的PHP语句来得到表单对象$form中的username属性,$form实际就是SalesReportForm的实例对象,其他两个输入域类似。
提交按钮的用法没变。
<input type='submit' name='submit' Value='Submit'/>
当用户提交正确的表单域时,销售报表页就会被显示。
销售报表页用一个表格来显示销售数据
下面是一个删减了的销售报表模板(salesReport.tpl):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
...
<h4>Sales Reports (Millions of Dollars AU)</h4>
<table class='idxTable' bgcolor='#C0C0C0'>
<tr class='idxTableHeader'>
<td>Report Description</td>
<td>Revenues</td>
</tr>
<tr class='idxTableRow'>
<td class='idxTableCell' nowrap>
Northern Sector
</td>
<td class='idxTableCellData' nowrap>
$ <?php print $data->salesNorth ?>
</td>
</tr>
...
</table>
...
</body>
</html>
这也是一个非常简单的网页文件
在<td ... />标签中包含了PHP标签用于访问$data对象的salesNorth属性:
<?php print $data->salesNorth ?>
$data对象实际是在SalesReportAction中创建的,在ActionDispatcher章节我们会看到:
$data = $request->getAttribute('FORM_DATA');
其余行也是一样,分别显示$data的其他属性:salesSouth; salesEast 和 salesTerrit.
最终生成的销售报表如下所示:

发表于 @ 2004年12月31日 08:27:00|评论(loading...)|编辑