我可以在Observer中定义构造函数和私有变量吗?

问题描述 投票:2回答:3

我的观察者在config.xml中定义了两种方法。

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

我应该将它们定义为config.xml吗?而且,如果我放置一些变量,例如private $myvar,我将能够使用它们吗?

我可以使用构造函数吗?

magento magento-1.7
3个回答
3
投票

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>

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


1
投票

观察者是一个PHP类。

仅约束条件是您将其与事件相关联时输入的函数(方法)名称存在。

除此之外,您可以执行PHP允许的任何事情。


0
投票

您可以在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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.