模型和观察者之间的区别

时间:2013-05-27 06:06:34

标签: php magento model-view-controller

我无法理解观察者和模型之间的区别。 它们真的是一回事吗?

例如,我有一个导出订单的模型。我有一个监听事件的观察者(例如下订单),然后控制器中有代码来调用导出订单模型。

现在,我有一个控制器,我想执行相同的功能(根据传递的请求导出订单)。

我可以简单地创建Observer的实例(已经有一个方法来调用Export模型),还是我需要再次创建代码来创建Model?

6 个答案:

答案 0 :(得分:2)

模型由实际模式组成。 [数据和字段]。

从您的背景

  

我有一个侦听事件的观察员(例如下订单)

任何倾听事件等的事物都是“控制器”的角色。 因此,A Model与Observer的完全不同

答案 1 :(得分:2)

就定义而言: -

就Magento

的使用而言
  • 模型

    • 模型扩展(另一个模型类)或(抽象类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>
    
  • 观察

    • Observer是普通的类,它实现了一些方法来监视脚本执行期间发生的定义事件,并执行此方法(函数)中定义的指令。
    • 观察者可以是独立的类,也可以扩展其他类,以便从中分享某些方法或任何其他可能的目的。

    • 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/