我无法理解观察者和模型之间的区别。 它们真的是一回事吗?
例如,我有一个导出订单的模型。我有一个监听事件的观察者(例如下订单),然后控制器中有代码来调用导出订单模型。
现在,我有一个控制器,我想执行相同的功能(根据传递的请求导出订单)。
我可以简单地创建Observer的实例(已经有一个方法来调用Export模型),还是我需要再次创建代码来创建Model?
答案 0 :(得分:2)
模型由实际模式组成。 [数据和字段]。
从您的背景
我有一个侦听事件的观察员(例如下订单)
任何倾听事件等的事物都是“控制器”的角色。 因此,A Model与Observer的完全不同。
答案 1 :(得分:2)
模型扩展(另一个模型类)或(抽象类Mage_Core_Model_Abstract),因此它具有从该基类共享,扩展和实现的基类和方法。
通常Magento中的模型与数据库表相关联,它通过资源和集合实现ORM
XML声明:
-
<global>
..............
<models>
<modulename>
<class>Package_Modulename_Model</class>
<resourceModel>Modulename_resource</resourceModel>
</modulename>
<modulename_resource>
<class>Package_Modulename_Model_Mysql4</class>
<deprecatedNode>package_modulename_mysql4</deprecatedNode>
<entities>
<modulename>
<table>db_table</table>
</modulename>
</entities>
</modulename_resource>
</models>
........
</global>
观察者可以是独立的类,也可以扩展其他类,以便从中分享某些方法或任何其他可能的目的。
XML声明:Observer不需要声明在magento中使用,您只需要根据调度的事件指定要触发的类名和方法。
-
<events>
<sales_quote_save_after>
<observers>
<observer_unique_name>
<type>model</type>
<class>Package_Modulename_Model_Observer</class>
<method>quoteSaveAfter</method>
</observer_unique_name>
</observers>
</sales_quote_save_after>
</events>
以上信息非常简短,但它证明了观察者和模型之间的基本区别。
你需要阅读并练习使用不同用例的magento来区分它们(查看wiki链接和google一些教程)
根据您要从控制器访问观察者的注释,您可以通过不同方式执行此操作
您可以将观察者编写为Extend(Mage_Core_Model_Abstract){您需要在模块的config.xml中定义模块模型部分},然后您将能够以普通模型{{1}的形式访问观察者}
将观察者编写为模块中的普通php类(例如:Package_Module_Model_Observer),然后你总是可以使用“new”运算符来实例化它Mage::getModel('modulename/modelname');
答案 2 :(得分:0)
模型在状态发生变化时通知其关联的视图和控制器。模型是业务逻辑。该模型管理应用程序域的行为和数据,响应有关其状态的信息请求(通常来自视图),并响应指令以更改状态(通常来自控制器)。 观察者是获取这些通知并对其进行更新/反应的东西。
答案 3 :(得分:0)
观察员是控制者。它侦听指定的事件,当触发甚至触发时,观察者告诉模型要做什么。模型处理数据,Controller告诉如何处理数据。
在您的情况下,我认为您不会创建观察者的实例,而是创建一个控制器并使用现有的导出模型。
答案 4 :(得分:0)
请浏览This Link。它详细描述了Magento中的模型,助手和控制器。
希望这有帮助!!!
答案 5 :(得分:0)
Magento中的模型视图控制器有点任意实现。在Magento中,观察者只是一个模型,它具有一个带有特定参数的公共方法,该参数保存从事件传递的数据,所以是的,它们是相同的。您只需创建一个实例并调用相同的方法,但您必须传递传递给该事件的相同数据。
例如:在事件sales_order_place_after
中传递订单对象。你可以这样做:
$observer = Mage::getModel(‘yourmodule/observer’);
$observerData->setOrder($order);
$observerData = new Varien_Object();
$observer->exportOrder($observerData);
在这里,您将找到有关该问题的更多详细信息。此链接还为您提供了Andreas von Studnitz和Nikolai Krambrock博士关于Meet Magento DE 2014代码质量的演示视频:http://www.code4business.de/code-qualitaet-magento/