【问题标题】:Can i define constructor and private variables in Observer?我可以在 Observer 中定义构造函数和私有变量吗?
【发布时间】:2013-12-07 12:30:48
【问题描述】:

config.xml 中定义的观察者中有两个方法。

如果我想在observer.php中添加其他方法,它们不会捕获任何事件:

我应该将它们定义为config.xml吗? 如果我输入一些变量,例如private $myvar,我可以使用它们吗?

我可以使用构造函数吗?

【问题讨论】:

    标签: magento magento-1.7


    【解决方案1】:

    Magento 中的观察者与其他类一样。您可以添加构造函数、私有变量或任何其他您喜欢的类元素,而不必将它们添加到 config.xml。

    例如,你可以像这样创建一个观察者类:

    <?php
    class Companyname_Modulename_Model_Observer {
    
      private $monkey = 'hi, I am a monkey';
    
      public function __construct() {
        $this->monkey = 'hi, I am still a monkey';
      }
    
      public function myObserverFunction($observer) {
        var_dump($this->showMonkeyString());
      }
    
      private function showMonkeyString() {
        return $this->monkey;
      }
    }
    

    在 config.xml 中,您只添加在事件发生时要执行的函数,例如:

      <frontend>
            <events>
                <catalog_category_load_after>
                    <observers>
                        <does_not_matter_what_we_call_this_tag>
                            <type>singleton</type>
                            <class>Companyname_Modulename_Model_Observer</class>
                            <method>myObserverFunction</method>
                        </does_not_matter_what_we_call_this_tag>
                    </observers>
                </catalog_category_load_after>
            </events>
        </frontend>
    

    当您在商店中加载随机类别时,输出将是“嗨,我还是一只猴子”。

    【讨论】:

      【解决方案2】:

      观察者是一个 PHP 类。

      唯一的限制是您在将其与事件关联时输入的函数(方法)名称应该在那里。

      除此之外,你可以做任何 PHP 允许的事情。

      【讨论】:

        【解决方案3】:

        你可以在 Observer 中使用构造函数

        在 Magento1 中查看以下 Observer 类

        class Mage_CatalogIndex_Model_Observer extends Mage_Core_Model_Abstract
        {
            protected $_parentProductIds = array();
            protected $_productIdsMassupdate = array();
        
            protected function _construct() {}
        

        class Mage_Rss_Model_Observer
        {
            /**
             * Factory instance
             *
             * @var Mage_Core_Model_Abstract
             */
            protected $_factory;
        
            /**
             * Application instance
             *
             * @var Mage_Core_Model_App
             */
            protected $_app;
        
            /**
             * @param array $args
             */
            public function __construct(array $args = array())
            {
                $this->_factory = !empty($args['factory']) ? $args['factory'] : Mage::getSingleton('core/factory');
                $this->_app = !empty($args['app']) ? $args['app'] : Mage::app();
            }
        

        【讨论】:

          猜你喜欢
          • 2011-05-06
          • 2011-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          • 2016-05-05
          相关资源
          最近更新 更多