php前端控制器二

2021年09月15日 阅读数:3
这篇文章主要向大家介绍php前端控制器二,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
 表现层的请求处理机制须要支持每一个用户多个请求,咱们能够以集中式或分散式的方式管理这些请求。 若是以分散的方式进行管理可能会致使以下的一些问题: 每一个请求都有一个共同的操做,分散处理可能会致使代码的重复。可能会致使视图导航和视图内容的耦合。分散处..

表现层的请求处理机制须要支持每一个用户多个请求,咱们能够以集中式或分散式的方式管理这些请求。php

若是以分散的方式进行管理可能会致使以下的一些问题:前端

  • 每一个请求都有一个共同的操做,分散处理可能会致使代码的重复。
  • 可能会致使视图导航和视图内容的耦合。
  • 分散处理可能会带来更高的维护成本。

若是咱们采用集中的方式进行管理,则能够对安全认证、国际化等操做统一处理,同时也能够在一个集中点处理站点的某些操做(如日志记录,站点全局访问控制等),
而且能够在一个地方处理逻辑在多个视图中重复显示。如此咱们有了选择前端控制器的理由。
web

前端控制器建议集中处理全部请求的处理,然而它并无限制系统中请求处理器的个数,对于不一样的服务,彻底能够提供不一样的处理器。安全

这与集中式的管理并不矛盾,其实集中只是一种相对的集中,从而达到解决分散式所产生的问题的目的,
任何一种模式只是为解决一些应用场景的特定问题。
服务器

运行机制框架

一个前端控制器其本体包括两部分:一个分发中心(或叫调度处理程序)和一个command(或动做)层次结构。ide

当一个请求到达服务器,前端控制器接收此请求,从其请求信息中获取足够的内容并决定下一步操做,而后委托给某个command,执行操做。post

分发中心能够是一个类或几个类,它没有页面输出,它的做用就是决定最终运行哪个command
这里简单点,能够直接根据参数约定,动态识别并执行。
url

这种简单方法作到了开闭原则,能够在不修改分发中心的前提下添加新的commandspa

例子

前端控制器在PHP的框架中基本上都会出现,在实现方式上,前端控制器大多采用Apacheurl_rewrite模块,

以在.htaccess中重写规则,将全部请求都转发到index.php文件处理。

PHPYII框架,ApplicationYII framework的前端处理器,它是整个请求过程的运行环境。
Application
接收用户的请求并把它分发到合适的控制器做进一步处理。
其一个访问到动做被执行,简单过程以下:

  • 用户访问 Web 服务器,假设其访问地址为index.php?r=post/show,则其入口脚本 index.php 会处理该请求。
  • index.php创建一个应用实例并运行(run方法,在运行前有若干组件加载,初始化操做)。
  • 在应用从一个叫 HTTPRequest 的应用组件获取这次请求的详情。
  • 在urlManager 的组件的帮助下,根据前面获取的请求详情肯定用户要请求的控制器和动做,分别对应CController和CInlineAction。
  • 应用创建一个被请求的控制器实例来进一步处理用户请求,控制器肯定由它的actionShow 方法来处理 show 动做。
  • 而后它建立并运行和该动做相关的过滤器(CController->runActionWithFilters( )),若是过滤器容许的话,动做被执行,即CController->runAction() ==> CInlineAction->run()。

对于前端控制器,Java体系中的Struts框架以XML配置方式体现,在strut.xml配置动做,在web.xml中配置过滤器。

  • 前端页面提交以“.do”结尾的请求。
  • FilterDispatcher接收请求并调用Action处理该请求。
  • Action处理完毕返回一个逻辑视图。
  • FilterDispatcher根据Action返回逻辑视图建立物理视图
  • 将物理视图返回给页面。

固然咱们也能够在一个PHP文件中实现整个前端控制,直接约定命名规范,根据传递进来的参数动态加载处理器,处理方法,视图等。