快速业务通道

使用Agavi进行MVC编程简介,第1部分:使用Agavi开辟一个新世界

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
gt;
  </validators>

 </ae:configuration>
</ae:configurations>

非常简单!这个 XML 块为page变量设置一个 AgaviRegexValidator,并且检查它是否匹配在验证器定义中指定的正则表达式。

受到步骤2和3的影响,当传递 URL /content/hello 时,Agavi的路由和验证子系统将自动检查该 URL,初始化一个名为page的AgaviRequestDataHolder变量,并且将值 hello 赋给它。

步骤4:编写操作代码

那么,为什么要捕捉 URL的特定部分呢?这是一个好问题,并且答案将慢慢明晰。现在,我们继续设置StaticContentAction,您可以在$WASP_ROOT/app/modules/Default/actions/StaticContentAction.class.php 中找到它。编辑这个文件使其包含清单14 中的代码:

清单14. Default/StaticContent View定义

<?php
class Default_StaticContentAction extends WASPDefaultBaseAction
{
 public function getDefaultViewName()
 {
  return ''Success'';
 }

 public function executeRead(AgaviRequestDataHolder $rd)
 {
  return ''Success'';
 }
}
?>

如前所述,Agavi 要求显式地指定用于处理不同类型请求的视图。例如,executeRead()方法指定如何处理 GET请求,而executeWrite()方法指定如何处理 POST请求。在这个例子中,因为StaticContentAction 仅处理 GET请求,所以它必须包含一个 executeRead()方法,并且这个方法应该引用StaticContentSuccessView。

需要注意的是,仅当前面提到的输入验证测试成功时,才会调用Success View。如果输入验证测试失败,Agavi的默认行为是生成 Error View。

步骤5:编写视图代码

现在我们转向这个部分的重点:设置StaticContentSuccessView以提供静态页面。在$WASP_ROOT/app/modules/Default/views/StaticContentSuccessView.class.php 打开视图文件,然后用清单15 中的代码填充它。

清单15. Default/StaticContentSuccess View定义

<?php
class Default_StaticContentSuccessView extends WASPDefaultBaseView
{
 public function executeHtml(AgaviRequestDataHolder $rd)
 {
  $this->setupHtml($rd);
  $words = explode(''-'', $rd->getParameter(''page''));
  array_walk($words, create_function(''&$i'', ''$i = ucfirst(strtolower($i));''));
  $tmpl = ''StaticContent'' . implode($words);
  if (file_exists(
   dirname($this->getLayer(''content'')->getResourceStreamIdentifier())
   . "/$tmpl.php")) {
   $this->getLayer(''content'')->setTemplate($tmpl);
  } else {
   return $this->createForwardContainer(
    AgaviConfig::get(''actions.error404_module''),
    AgaviConfig::get(''actions.error404_action''));
  }
 }
}
?>

这看起来可能比较复杂,但实际并不复杂。一般而言,这个视图尝试将该 URL请求与一个静态页面模板匹配,如果可用就显示它。首先,视图的executeHtml()方法使用AgaviRequestDataHolder 对象的getParameter()方法获取前几个步骤中由路由子系统设置的page变量。然后,它根据一个预定义的文件命名约定重新格式化这个值,并且尝试查找并显示具有相同名称的模板文件。

例如,如果客户端请求的URL 为/content/hello-world,那么对$rd->getParameter(''page'')的调用将返回值 hello-world,并且视图将查找一个名为$WASP_ROOT/StaticContentHelloWorld.php的模板。如果该模板文件存在,视图将把它发送给客户端;如果不存在,将自动转到Agavi的默认 Error404 视图,向客户端显示 “Page not fou

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号