Magento开发文档(三):Magento控制器

上传人:沈*** 文档编号:146253955 上传时间:2022-08-30 格式:DOCX 页数:8 大小:55.63KB
收藏 版权申诉 举报 下载
Magento开发文档(三):Magento控制器_第1页
第1页 / 共8页
Magento开发文档(三):Magento控制器_第2页
第2页 / 共8页
Magento开发文档(三):Magento控制器_第3页
第3页 / 共8页
资源描述:

《Magento开发文档(三):Magento控制器》由会员分享,可在线阅读,更多相关《Magento开发文档(三):Magento控制器(8页珍藏版)》请在装配图网上搜索。

1、Magento开发文档(三):Magento控制器+10分类:Magento、Magento开发标签:magento中文手册、magento中文教程、Magento中文文档、Magento开发文档5,527人浏览Magento中文手册(三):Magento控制器提到模型-视图-控制器这种MVC架构,要追溯到Smalltalk编程语言和Xerox Parc。从那个时候开始,就有许多系统将自己描述为MVC架构。这些系统虽然在某些地方有细微差别,但都实现了数据层,逻辑层和前段表现代码的分离。大部分的PHP MVC框架都拥有以下基本特征, 所有的URL请求会被前端控制器解析 前端控制器会检查请求的UR

2、L路径,并从中获取一个控制器和动作名(这个过程叫做路由) 实例化从URL中获取的控制器 该控制器中,与从URL里获取的动作名一致的方法会被调用 根据请求的变量,该方法被实例化或调用方法获取模型 该动作方法从模型中获取到数据,这些获取的信息会被传递到视图中 使用从数据结构中获取到的信息,视图输出HTML代码相对于“一个PHP文件对应一个页面”来说,这种MVC架构是个巨大的进步。然后对于一些软件工程师来说,它依然是个丑陋的架构。他们经常抱怨说, 前段控制器文件会在全局命名空间中运行 约定型的架构没有配置型架构更具扩展性比如说, URL路由规则通常是无法扩展的 控制器被绑定在特定的视图 即使该系统拥

3、有重写核心代码的功能,程序员依然只能在无尽的重构中编写代码Magento团队创建了一个更为抽象的MVC模式,大概的运行过程是, URL地址首先被一个PHP文件解析 该PHP文件会根据解析情况实例化一个Magento应用 这个Magento应用会实例化一个前端控制器对象 接着,前端控制器实例化路由对象 路由对象检查请求的URL地址,并作出相应的匹配 如果匹配成功,相应的控制器和动作会被分发 该控制器会被实例化,并且与动作同名的方法会被调用 被调用的方法根据请求的类型,对相应的模型调用相应的方法以获取数据 结束方法调用之后,控制器会实例化布局对象 根据请求中包含的变量及系统属性(通常叫做句柄),布

4、局对象会为该请求创建一系列的Block对象 布局还会在相应的Block对象中调用输出方法,开始套嵌输出(Blocks之间的套嵌) 每个Block都有相关联的模板文件,Blocks包含PHP逻辑代码,模板文件则负责生成HTML文件 Block从模型中获取相关数据,换句话说,控制器并不用来传递数据到视图中我们会在整个教程中介绍上面的所有部分,本章主要涉及到到前端控制器-路由-动作控制器环节。Hello World又到Hello World了,你懂的。这一节主要任务是 创建Hello World模块 配置模块的路由规则 为路由创建动作控制器创建Hello World模块首先,我们先为该模块创建好目录

5、结构:app/code/local/Magentotutorial/Helloworld/Blockapp/code/local/Magentotutorial/Helloworld/controllersapp/code/local/Magentotutorial/Helloworld/etcapp/code/local/Magentotutorial/Helloworld/Helperapp/code/local/Magentotutorial/Helloworld/Modelapp/code/local/Magentotutorial/Helloworld/sql然后为这个模块创建配置文

6、件,配置该配置文件路径位于,app/code/local/Magentotutorial/Helloworld/etc/config.xml并放入下列代码, 0.1.0 和之前一样,需要创建一个文件激活该模块,该文件路径位于,app/etc/modules/Magentotutorial_Helloworld.xml放入如下代码, true local 最后,检查下我们是否成功建立Hello Wolrd模块并激活。 清空Magento缓存 在管理员界面中,点击System-Configuration-Advanced. 打开”Disable Modules Output” 大概在底部,会显示M

7、agentotutorial_Helloworld模块配置模块的路由规则接着,我们开始配置路由规则,路由会将请求的URL地址分发到一个控制器和它的方法上。不像其它约定型的PHP MVC框架,在Magento中,你需要明确的在全局配置文件中配置路由规则,来告诉URL地址如何匹配对应的控制器和方法。在config.xml文件中,加入下列代码, standard Magentototurial_Helloworld helloworld 这块代码里边牵涉到很多术语,接下来一一解析。是什么?该标签涉及到Magento的一个术语Area。可以将Areas视为一些独立的Magento应用。“fronten

8、d” Area是Magento购物车应用的前端表现。”admin” Area是后端管理员应用。”install” Area是用来安装Magento的应用。为什么配置一个模块的路由要使用复数呢?引用一句Phil Karlton关于计算机科学的著名论断:There are only two hard things in Computer Science: cache invalidation and naming things意思是说计算机科学中最棘手的两件事就是缓存验证和命名。和许多大型系统一样,Magento同样受到命名的困扰。在全局配置文件书中,可以看到许多这种甚至是丑陋的命名方式。便是其中

9、之一。该标签通常会包括关于路由规则的配置信息,有时候又会包含实际的路由对象的配置信息。这种命名方式初看起来有些不爽,但是随着你对于Magento系统的深入学习,你会逐渐改变对它的看法。是什么?当路由器解析URL时,会将URL分为以下几个部分,通过在标签中定义”helloworld”值,Magento就能够响应所有以下列URL访问的地址很多刚刚接触Magento的开发者都会将frontName与Magento的前端控制器对象搞混淆。实际上它们完全不是一回事。frontName只属于路由。标签的作用?该标签必须是当前模块名的小写形式。我们创建的模块是Helloworld,所以该标签应该是。可能你会

10、注意到标签中的值也于模块名一致。这个其实是一个不成为的规定,并非是必须一致的。在你的自定义模块中,最好使用模块名与命名空间的组合来命名,以避免命名冲突。Magentotutorial_Helloworld该标签的值必须是模块的全名,包含package/namespace名。该配置让系统能够正确定位到控制器文件。创建动作控制器完成配置文件之后,接下来需要做的就是创建控制器文件及类。在以下路径创建该类,app/code/local/Magentotutorial/Helloworld/controllers/IndexController.php包含以下内容,class Magentotutori

11、al_Helloworld_IndexController extends Mage_Core_Controller_Front_Action public function indexAction() echo Hello Index; 清空缓存,访问下列地址,也可以访问以下地址,如果没有出错的话,页面中应该能显示”Hello World”。恭喜你,你已经成功搞定了第一个Magento控制器。动作控制器文件路径控制器应该放在模块的controllers文件夹中,系统会自动在这个路径中寻找控制器。动作控制器命名方式还记得在config.xml配置文件中的标签吗?Magentotutorial_

12、Helloworld动作控制器的命名应该遵循以下规则, 以配置文件标签中的值起头(Magentotutorial_Helloworld) 紧接着一个下划线(Magentotutorial_Helloworld_) 再接着是该控制器的名字(Magentotutorial_Helloworld_Index) 最后,加上Controller(Magentotutorial_Helloworld_IndexController)所有的Magento控制器都是继承自Mage_Core_Controller_Front_Action类。index/index路径上文中提到过,Magento的URL地址按照

13、以下规则进行路由解析,那么在下面这个地址中,URI中的”helloworld”是frontName,后面两个index分别是调用的控制器及方法名,即调用helloworld模块中的IndexController控制器中的indexAction方法。如果URL地址中缺少控制器及方法部分,Magento默认使用index,所以下面地址访问的页面是相同的。如果访问的URL地址如下,Magento会做如下操作, 在全局配置文件中找到使用frontName为checkout的模块(Mage_Checkout) 继续查询cart控制器(Mage_Checkout_CartController) 调用car

14、t控制器下的addAction()方法控制器路径让我们试着添加一个非默认方法到控制器中,添加如下代码到IndexController.phppublic function goodbyeAction() echo Goodbye World;然后访问下面的URL地址:IndexController继承自Mage_Core_Controller_Front_Action类,有很多方法可以直接使用。例如,除上述URI中提到的三部分之外,其它部分会自动传给一个键值对数组。添加如下代码到IndexController中。public function paramsAction() echo ; for

15、each ($this-getRequest()-getParams() as $key = $value) echo Param: .$key.; echo Value: .$value.; echo ;完成之后访问下面的URL地址一切正常的话,页面中会显示该URL地址中的参数。最后,对于下面这个URL地址,系统应该如何响应呢?该URL中,控制器的名字是messages,所以我们需要创建一个MessagesController控制器,在以下路径创建该文件app/code/local/Magentotutorial/Helloworld/controllers/MessagesController.php接着在该控制器中添加goodbyeAction()方法public function goodbyeAction() echo Another Goodbye;关于Magento控制器的介绍已经完成了。虽然看起来比其他的PHP MVC框架要复杂许多,它的高度可扩展性却允许你创建任何你想要的URL结构。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!