首页 > 解决方案 > Moodle 事件 API

问题描述

我正在尝试为 Moodle 开发一个插件,使用将在创建新博客文章时发送电子邮件的事件 API。我使用以下结构创建了我的插件:

blog_observer/
├── classes
│   └── observer.php
├── db
│   └── events.php
└── version.php

db/events.php

defined('MOODLE_INTERNAL') || die();

$observers = array(
    array(
        'eventname'   => '\core\event\blog_entry_created',
        'callback'    => '\blog_observer\blog_observer::blog_created',
    ),
);

我从这里/blog/locallib.php获得了事件名称。

classes/observer.php

namespace blog_observer;

defined('MOODLE_INTERNAL') || die();

class blog_observer {

    /**
     * The observer monitoring all the events.
     *
     * @param \core\event\base $event event object.
     * @return bool
     */
    public static function blog_created(\core\event\base $event) {
        file_put_contents('php://stderr', print_r("observed an event", TRUE));

        return false;

    }
}

但是我没有看到那个日志,好像它甚至没有进入那个类,为什么?

标签: phpeventsmoodle

解决方案


我想通了,它是命名空间......

所以更新的文件是(我也将我的插件重命名为newsletter):

newsletter/
├── classes
│   └── observer.php
├── db
│   └── events.php
└── version.php

db/events.php

defined('MOODLE_INTERNAL') || die();

$observers = array(
    array(
        'eventname'   => '\core\event\blog_entry_created',
        'callback'    => '\local_newsletter\observer::blog_created',
    ),
);

classes/observer.php

namespace local_newsletter;

defined('MOODLE_INTERNAL') || die();

class observer {

// The rest is same here

}

推荐阅读