Moodle事件观察者未在本地插件中触发

时间:2017-03-31 14:55:17

标签: moodle moodle-api

我已在此位置moodle/local/redirectafterlogin创建了一个插件,其结构如下:

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

version.php:

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

$plugin->version = 20170333;
$plugin->requires = 2015111000;
$plugin->component = 'local_redirectafterlogin';

events.php:

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

    $observers = array(
        array(
            'eventname' => 'core\event\user_loggedin',
            'callback' => 'local_redirectafterlogin_observer::user_loggedin',
        ),
        array(
            'eventname' => 'core\event\user_loggedout',
            'callback' => 'local_redirectafterlogin_observer::user_loggedin',
        ),
    );

observer.php:

class local_redirectafterlogin_observer
{
    public static function user_loggedin(core\event\base $event)
    {
        $event_data = $event->get_data();
        var_dump($event_data);
        die();
    }
}

缓存已被清除了很多时间,版本号也被撞了,但回调从未被调用过!

  1. 出了什么问题,为什么没有触发回调?
  2. 如何调试事件(Moodle中有没有办法查看调度事件)?

3 个答案:

答案 0 :(得分:1)

我认为自动类加载不会找到你的观察者类。

尝试添加到观察者类文件的顶部:

namespace local_redirectafterlogin;

然后将events.php更改为:

'callback' => 'local_redirectafterlogin\local_redirectafterlogin_observer'

(你也可以大大缩短类名,现在它是命名空间)。确保你碰到版本号,重新加载events.php文件。

您可能想重新考虑插件的命名,因为不允许在事件处理程序中进行重定向,因为这会导致很多问题。

答案 1 :(得分:1)

这是一个结构错误!我将包含classes的{​​{1}}文件夹放在observer.php文件夹中! 在插件的根目录移动db文件夹后,如下所示,可以触发观察者!

结构没问题:

classes

答案 2 :(得分:0)

我的经验是var_dump或输出do stdout不是trigggert。快速"调试"我将file_put_contents用于临时日志文件