PHP 的 MVC 框架参考实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PHP 的 MVC 框架参考实现

PHP 的 MVC 框架参考实现 MVC 模式在 Java 中表现的尤为出众,不光 Swing 是按照 MVC 来设计的,而且 Java 的 Web 框架也是 MVC1、MVC2 的。MVC 模式对于开发维护确有许多好处,所以 PHP 的框架,如 Zend、Symfony,PHP 的产品 Wordpress 和 Joomla 都应用了 MVC 模式。PHP 不像 Servlet 那样有成熟的规范,如 web.xml、servlet、filter 等,但变换着一些把式同样能实现出优雅的 MVC 模式。这里简单介绍一下 PHP 是如何实现 MVC 模式,参照了了 Zend 的实现,我觉得还有许多改进的地方。说明的时候会拿它的各部分与 Struts1 的 MVC 相比较。 在 HTTP 环境中的 MVC 模式一句话描述就是:控制器根据 URI,把请求转给相应的 Action,由 Action 调用模型方法处理或得到数据,再选择相应的视图呈现界面。用过 Struts1 的请保留一些 Struts1 的实现原理,现在来看 PHP 的实现方式。 本例参考了 《PHP 高级程序设计 模式、框架与测试》一书中关于 MVC 的介绍,因本人受 Struts 等 MVC 的影响,所以对原书中的示例进行了大刀阔斧、面目全非的改造。代码结构如下: lib 目录中为本 MVC 的核心代码,application 目录中为应用代码,index.php 为入口文件兼具引导功能。 第一要素:统一口径(/index.php): 要让 HTTP 请求都能进入到我们的 MVC 框架来,需要流经一个统一的入口,这里就是 /index.php 文件,也就是必须全部用 http://localhost/MvcSample/index.php/controller=user name=Unmi.. 这样的方式来访问,你可以用某种方式让其他的 php 文件被禁止直接访问。 在 Struts1 中,是在 web.xml 中配置由 ActionServlet 处理所有的 *.do 的请求,Struts2 也是在 web.xml 中配置由 FilterDispatcher 来拦截所有的请求。而 PHP 没有像 Java Web 那么多的规范,但可以借助于 mod_rewrite 模块,将某些请求转发给 /index.php 处理,具体做法是在应用的根目录下建立一个 .htaccess 文件,内容为: RewriteEngine On RewriteRule !\.(js|gif|png|css)$ index.php 意思为除图片、js、css 文件都把请求定向给 index.php,当然 .htaccess 还是应该进行更优化配置的,还有就是在 Apache 中要启用 mod_rewrite 模块。有了 .htaccess 后,你随便输入些像 http://localhost/MvcSample/sfsf/sdfsdf 的地址都不会是 404 错误,而是全部转向到了 /index.php。/index.php 便成了一个统一的入口,后面发生的事情可受控了。 来看看 index.php 文件的内容: ?php //导入组件 require_once(lib/front.php); require_once(lib/controller.php); require_once(lib/view.php); //初始化前端控制器 $front = new FrontController(); //转发请求到相应的控制器 //route 就是路由的意思,就是分布请求,Struts 里是用 Dispatch 的概念 $front-route(); //显示页面数据 echo $front-getBody(); 第二要素:前端控制器(lib/front.php) 在 index.php 中调用了前端控制器 FrontController 的 route() 路由方法,根据 URL 中的参数找到相应的控制器,调用相应的方法,获得数据并使用视图显示出来。例如有 URL http://localhost/MvcSample/index.php?controller=usermethod=user_listname=Unmi,在 route() 方法中就会调用 UserController 的 user_list 方法执行业务逻辑,获得相应的数据,最后使用视图 views/user/list.php 显示页面。 需要特别注意的是控制器名与脚本文件、视图文件的对应规则,可自行约定。脚本文件需要临时 include 进来,你也可以用 SPL 的自动加载机制来加载文件。看代码 front.php ?ph

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档