magento的请求周期(request cycle)
magento对某个URL的请求是如何被翻译成到某个特定模块的执行呢?我们来看一下下面的这个URL:
http://example.com/magento/(index.php)/customer/account/index/
以反斜杠为分隔符,URL分成以下这几部分:
http://example.com 域名
magento URL前缀
(index.php) 不一定会有这个部分。当你使用apache的rewrite功能时可以省略掉index.php
customer 模块名
account 前台控制器名
index action名,通常默认为index
要追踪一个对magento请求的执行过程并非易事,原因在于以下两点:
1、使用了router
2、使用了dispatch机制
首先是由默认的前端控制器接受请求,它会将请求的参数和内部的router列表进行匹配,如果匹配成功,那么就会将请求交给另一个新的前端控制器(由请求参数和router匹配所得到的模块中的创建)。通常最后的(MVC类型)控制器是一个"Front Action"对象,它里面定义了一系列的有关业务逻辑的method(方法)。这个对象最后会根据请求的参数来决定调用哪 一个action method来处理请求,在处理完后将请求标识为"dispatched"。
认识magento的module(模块)
module是magento最重要的部分。在magento站点中的任何一个操作,无论是在前台还是后台都是通过模块来实现的。在magento中一个模块是由下列这几项的的一项或多项组成:配置文件,数据库相关的sql文件,呈现对象(rendering objects),辅助类(helper class),数据模型类和动作控制器类(action controller)。
magento中的模块是放在什么位置,我们开发的模块又应该放在什么地方?magento引入了代码池(code pool)和包(package)两个概念。细心的你可以已经发现app/code下有三个目录,这是magento提供的代码池。其中所有magento自带的模块被放到core当中,而local则用来保存我们自己开发的模块,community则用来存放我们集成到magento中的第三方插件代码,不过这个文件夹有可能在后来的版本中淘汰掉。你可能已经发现magento的模块不是直接放在代码池core目录下,而是放在core代码池目录下的Mage目录中。magento将代码池下的目录称作包,目的不仅仅是将相关的模块用包分组,更重要的是通过将某个包下面的所有模块的类的类名都使用包名为前缀(如Mage包下的所有模块的类名前缀是Mage_)规范来达到类似名字空间的作用,使开发人员免去类名重复的困扰。
参看下面的目录结构和相关的代码中定义的类名:
- App/
|- code/
| |- community/
| |- core/
| | |- Mage/
| | |- Zend/
| |- local/
|- design/
|- etc/
下面是magento中的catalog模块的目录结构:
- Mage/ 包名
|- Catalog/ 模块名
| |- Block/ 呈现对象(rendering objects)
| |- Helper/ 辅助类(helper class)
| |- Model/ 数据模型类。负责数据操作
| |- controllers/ 动作控制器类(action controller)
| |- etc/ 配置文件
| |- sql/ 数据库相关的sql文件
blocks: blocks是一组用来协调模板文件和模型的对象,每个block对应一个模板文件(模板文件是指以.phtml为扩展名的文件,其实就是一个普通的在html中嵌入php代码的文件)。每一次的magento请求实际上是处理一系列的block对象和相应的模板文件。所有的block类继承Mage_Core_Block_Template类(它继承Mage_Core_Block_Abstract类),它的主要方法是toHtml(),它通过调用renderView()来将模板文件翻译成html代码。magento默认不使用任何的模板引擎,而是直接使用php。所有renderView()事实上只是简单的调用include包含模板文件而以,如果你想使用其它的模板引擎,你可以通过修改Mage_Core_Block_Template类的renderView()方法来实现。
controllers: controller是所有业务逻辑的起点。每个controller类都继承Mage_Core_Controller_Varien_Action类,它实际只是zend的Zend_Controller_Action类的简单修改版本,包括下面三个主要的方法:
• dispatch($action)
• preDispatch()
• postDispatch()
helper: 重要的是__(两个下划线)和htmlEscape方法。__用来翻译字符串,几乎可以在任何一个对象内调用。
配置文件: 模块的配置文件存放在该模块目录下的etc目录下。通常会有三个配置文件,其中config.xml是会直接影响到模块的动作。还有两个system.xml和convert.xml会自动生成供你在使用管理后台的form表单。
在magento中的一切都可视为模块。甚至magento本身也是在zend框架下开发出的一个模块。模块本身可以有配置文件和数据库设置,这样开发人员就可以对magento进一步扩展。
分享到:
相关推荐
为了更直观地了解Magento配置系统的工作原理,本节将介绍如何创建一个简单的Magento模块,并分析其背后的配置机制。 1. **设置模块目录结构** Magento的模块结构通常遵循一定的规范。例如,官方提供的模块位于`...
学习如何创建和修改主题,包括布局XML文件、皮肤CSS、HTML和图像,以及如何使用Magento的主题继承机制,能够让你构建独特的用户界面。 3. **Magento商城_目录结构说明** Magento的目录结构复杂而有序,了解这一...
Magento的SMTP插件是为了克服默认邮件发送机制可能遇到的问题,如邮件被标记为垃圾邮件或无法送达。通过集成SMTP插件,商家可以使用自己的SMTP服务器,如Gmail、Yahoo、Microsoft Exchange等,确保邮件能够准确无误...
8. **性能优化**:当处理大量数据或频繁调用API时,考虑缓存策略、批量操作和错误重试机制来提高性能和可靠性。 9. **安全实践**:遵循最佳安全实践,例如加密敏感信息,避免在代码中硬编码API密钥,定期轮换Access...
10. **事件处理**:使用Magento的事件观察者机制来响应系统中的特定事件。 11. **后端开发**:设计和实现插件的后端界面,包括配置、列表视图和编辑表单。 ### 高级主题 - **信任插件开发**:了解如何创建受信任的...
关于插件,Magento 1.x中的“重写”机制和Magento 2.x中的“插件(Interceptors)”允许开发者在不修改核心代码的情况下改变系统行为。例如,如果你想要改变默认的结账流程,你可以创建一个新的控制器或服务合同插件...
3. **布局、块和模板**:讲解了 Magento 的页面布局机制,包括布局更新 XML 文件、Block 类和模板文件的使用。 4. **模型和 ORM 基础**:介绍了 Magento 如何使用 Entity-Attribute-Value (EAV) 模型存储数据,并...
本章重点讨论了如何保护Magento免受攻击以及如何通过缓存机制等方式提高网站响应速度。 #### 专业知识点 1. **Magento核心架构** - Magento采用了MVC(Model-View-Controller)架构模式,这种模式有助于提高代码...
本文将深入探讨Magento中的数据层操作与数据封装机制,特别是VarienDataCollections这一关键概念,并通过实际代码示例进行讲解。 #### 二、Magento中的数据封装 在Magento中,数据封装主要是通过`Varien_Object`类...
跟模板的继承机制是一样。 重写核心模块 如果你要修改app/code/core/mage/customer/controller/AccountController.php文件。可以复制AccountController.php这个文件放到app/code/local/Company/customer/controller...
首先,我们来了解一下Magento的扩展机制。Magento采用模块化设计,允许开发者通过安装插件(或称为扩展)来增加或修改平台的功能。"package.xml"文件是Magento扩展的标准配置文件,它定义了扩展的基本信息,如扩展名...
为了解决这个问题,Magento提供了一种优先级机制,通过`config.xml`中的`<priority>`标签来指定模块处理请求的顺序。 #### 三、进一步研究 为了加深理解,可以参考以下代码示例: - **Magento框架如何与各种代码...
### Magento新手指南知识点详解 #### 一、Magento简介与特性 **Magento**是一款功能强大的开源电子商务平台,由Varien公司(后被Adobe收购)于2008年首次发布。它以其灵活性、可扩展性和丰富的功能集而闻名,是...
了解并掌握Magento的MVC架构对于开发人员来说至关重要,因为它有助于理解系统的运行机制,从而更好地定制和扩展功能。在实践中,通过阅读和分析源码,结合实际项目进行实践,能够加深对MVC架构的理解,提升开发效率...
总而言之,这个“magento模块组件或插件开发教程”旨在帮助开发者建立起对Magento核心机制的深刻理解,从而能够自如地开发和维护自己的模块。无论是新手还是有经验的开发者,都能从中受益匪浅,进一步提升自己的...
此外,Magento的事件观察者机制也可能在产品预览中发挥作用。开发者可以通过监听特定的事件,比如`catalog_product_view`,并在对应的事件处理函数中实现预览功能。这可以在`app/code`目录下的`etc/config.xml`文件...
3. **验证机制**:为了确保评论的真实性和避免虚假评价,插件可能包含一种验证机制,例如只有购买过该商品的用户才能进行评价。 4. **邮件通知**:当有新的商品评价时,商家可以通过邮件收到通知,便于及时回应和...
2. 安全过滤:在删除前,可能有安全验证机制,确保只有非真实交易或者测试订单被删除,避免误删实际订单。 3. 日志记录:删除操作会被记录在日志中,便于追踪和审计,防止数据丢失。 4. 用户权限:可能根据用户角色...
首先,我们来深入了解Magento的搜索机制。默认情况下,Magento使用SQL查询进行全文搜索,这可能不总是提供最相关的搜索结果。通过安装这个插件,商家可以为客户提供一个更高级的搜索体验,允许他们输入多个关键词...
这展示了Magento布局更新机制的工作原理,通过XML文件控制页面元素的布局。 Magento的模板文件调用是通过Block对象实现的。Block对象是页面构建的基本单元,它们负责渲染HTML和执行业务逻辑。例如,`header` Block...