【问题标题】:Fatal error: Call to a member function check() on a non-object致命错误:在非对象上调用成员函数 check()
【发布时间】:2017-03-27 17:39:49
【问题描述】:

我们的网站在周末崩溃并开始返回一个致命错误。非常感谢任何帮助。

这是完整的错误:

致命错误:在第 109 行的 app/code/local/Mirasvit/Email/Model/Service/EventGenerateService.php 中的非对象上调用成员函数 check()

这是 EventGenerateService.php 文件的内容。第109行距离底部几行$events = $event->check($eventCode, $timestamp, $observer);

class Mirasvit_Email_Model_Service_EventGenerateService implements Mirasvit_Email_Model_Service_EventGenerateInterface
{
    /**
     * Default strategy - schedule the emails starting from email queue generation date
     */
    const SCHEDULE_STRATEGY_DEFAULT = 0;

    /**
     * Event strategy - schedule the emails starting from event creation date
     */
    const SCHEDULE_STRATEGY_EVENT   = 1;

    /**
     * @var Mirasvit_Email_Model_Event
     */
    private $eventModel;

    /**
     * @var Mirasvit_Email_Helper_Event
     */
    private $eventHelper;

    private $scheduleStrategy;

    private $triggerId = null;

    public function __construct()
    {
        $this->eventHelper = Mage::helper('email/event');
        $this->eventModel = Mage::getModel('email/event');
        $this->scheduleStrategy = self::SCHEDULE_STRATEGY_DEFAULT;
    }

    /**
     * Set email schedule strategy, default or event
     *
     * @param int|null
     *
     * @return $this
     */
    public function setScheduleStrategy($scheduleStrategy)
    {
        $this->scheduleStrategy = $scheduleStrategy;

        return $this;
    }

    /**
     * Set associated trigger ID
     *
     * @param int
     *
     * @return $this
     */
    public function setTriggerId($triggerId)
    {
        $this->triggerId = $triggerId;

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function generate(array $events, $timestamp = false)
    {
        foreach ($events as $eventCode) {
            $this->registerEvent($eventCode, $timestamp);
        }
    }

    /**
     * {@inheritdoc}
     */
    public function registerEvent($eventCode, $timestamp = false, $observer = null)
    {
        $event = $this->eventHelper->getEventModel($eventCode);
        // triggerId exists only in manual generation
        if ($this->triggerId) {
            $triggers = array($this->triggerId);
            /* @var $manualSaveProcessor Mirasvit_Email_Model_Service_EventSaveProcessor_ManualSaveProcessor */
            $manualSaveProcessor = Mage::getModel(
                'email/service_eventSaveProcessor_manualSaveProcessor',
                $this->scheduleStrategy
            );
            $event->setEventSaveProcessor($manualSaveProcessor);
        } else {
            $triggers = $this->eventHelper->getAssociatedTriggers($eventCode);
        }

        $events = $event->check($eventCode, $timestamp, $observer);

        if ($events) {
            $this->eventModel->addTriggerEvents($events, $triggers);
        }
    }
}

【问题讨论】:

  • $event 不是对象。

标签: php


【解决方案1】:

这个错误意味着应该由行$event = $this->eventHelper->getEventModel($eventCode);创建的对象没有被创建。 您应该检查 eventHelper 的 getEventModel 方法

【讨论】:

  • 感谢您为我指明正确的方向,Dima。我还发现该错误仅发生在特定的支付模块上。
猜你喜欢
  • 2017-07-20
  • 1970-01-01
  • 2013-11-25
  • 2012-05-30
  • 2016-08-30
  • 2015-02-06
  • 2012-05-14
  • 2013-11-19
  • 2017-04-30
相关资源
最近更新 更多