Magento请求分发与控制器

Magento请求分发与控制器


Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发!

下面为传统的mvc结构

URL请求被一个PHP文件拦截,这个文件通常称为前端控制器(Front Controller)
    这个PHP文件分析这个URL,获得一个执行控制器(Action Controller)的名字和一个执行方法(Action Method)的名字,这个过程称为路由(Routing)
    实例化#2获得的执行控制器
    调用执行控制器的执行方法
    执行方法中处理业务逻辑,比如获取数据等
    执行控制器负责把数据传递给显示逻辑,用于层面之间数据的交换
    显示逻辑生成HTML,为显示层!

前端控制器仍然以全局的方式运行
    基于配置的惯例导致了系统不够模块化

URL Routing不够灵活
        控制器往往和视图绑定
        更改默认设置往往导致大量的重构

Magento的mvc结构略显不同,为下面的方式:

URL请求被一个PHP拦截
    这个PHP文件实例化一个Magento对象
    Magento对象实例化前端控制器
    前端控制器实例化全局配置中指定的路由对象,可以是多个
    路由对象会逐个与请求URL匹配
    如果发现匹配,那么可以获得一个执行控制器和一个执行方法的名字
    实例化#6获得的执行控制器,并调用相应的执行方法
    执行方法中处理业务逻辑,模型数据
    控制器实例化布局对象(Layout)
    布局对象根据请求的参数,系统配置创建一个块对象(Block)列表,并实例化
    布局对象会调用块对象的output方法生成HTML。这是一个递归的过程,因为块对象可以嵌套块对象
    每一个块对象都和一个模板文件(Template File)对应。块对象包含了显示逻辑,模板文件包含了HTML和PHP输出代码
    块对象直接从模型那里获得数据,换句话说,在Magento的MVC架构中,控制器并不直接把数据传给视图

时间: 2024-11-09 01:40:59

Magento请求分发与控制器的相关文章

前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。

本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 servlet的生命周期 首先我们回忆一下servlet的生命周期: Servlet生命周期分为三个阶段:[http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html] 1,初始化阶段  调用init()方法.Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init(

Magento路由分发过程解析(二):Standard路由对象(转)

本文主要关注Magento的standard路由对象中的Mage_Core_Controller_Varien_Router_Standard::match()方法,该方法在前端控制器中调用,主要用来检查当前请求的URL地址,并决定匹配的模块,控制器以及方法,并且最后调用控制器分发该方法. 对于在上篇文章前端控制器循环所有的路由器来说,该方法完成了以下任务, 路由对象提供match()方法,并检测请求对象,如果匹配,则该路由对象获取该请求. 将请求标记为已分发. 设置请求对象. 假设没有找到匹配

研究 Spring MVC 将请求分发到 Spring 依赖注入的类实例

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 一上午时间,碰了 N 个钉子,不断地把钉子拨掉,记录一下选择的工具和方法: 1.首先 Spring Mvc 框架的下载,那么有三个包是必不可少的:

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *

Nginx将请求分发到各web应用

介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 1.asp.net mvc5开发 (1)新建一个MVC5工程,新建一个Controller,在Index方法实现将当前时间保存到Session["mysession"],并写Cookies["mycookies"]存储主机名和当前时间. 1 2 3 4 5 6 7 8 9 10

Magento路由分发过程解析(一):在前端控制器中获取路由对象(转)

Magento的路由系统,需要考虑到两个抽象层. 1,首先你需要了解,可能会有无数多个路由对象负责处理路由逻辑,最后只有一个路由对象能够获取并处理该请求.默认情况下,Magento拥有四个路由对象. 2,在这四种路由对象内,又有一系列不同的规则用于匹配url地址到相应的控制器方法.这些规则非常相似,只有一些细微的差别. 路由匹配迭代过程 Magneto的路由开始于前端控制器对象的Mage_Core_Controller_Varien_Front::dispatch()方法,在如下循环中,选择合适

Nginx简单的请求分发跟负载均衡----分发到多台机器

需求: 请求http://10.3.10.99:8000分发到http://10.3.10.22:8089/time_discernhttp://10.3.10.99:8089/time_discern •? Nginx集群其实是:虚拟主机+反向代理+upstream分发模块组成的虚拟主机:接受和响应请求反向代理: 带?户去数据服务器拿数据upstream: 告诉Nginx去哪个数据服务器拿数据•? 数据?向1)虚拟主机接受?户请求2)虚拟主机去找反向代理3) 反向代理让去找upstream4)

不能使用控制器“XXXController”的单个实例处理多个请求。如果正在使用自定义控制器工厂,请确保它为每个请求创建该控制器的新实例。

原因:应用@{Html.RenderAction("aaa","XXX");}时路径路由和动作控制器不能是相同的,不然会的错. 比如:http://localhost/admin/abc 而此public ActionResult XXX() { ... return PartialView(models); } 也是在控制器admin里,那么就会出类似错误! 本身就可以显示为什么还要在本控制器做个Render呢?这是很明显的悖论.

使用@Controller注解为什么要配置<mvc:annotation-driven />

<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter.即解决了@Controller注解的使用前提配置. <context:annotation-config/>是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用.即解决了@Controller标识的类的bean的注入和使用.