Наблюдатель событий Moodle не запущен в локальном плагине
Я создал плагин в этом месте 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();
}
}
Кэширование было очищено много времени, и номер версии также был увеличен, но обратный вызов никогда не вызывается!
- Что не так, почему обратный вызов не срабатывает?
- Как я могу отлаживать события (есть ли способ в Moodle увидеть отправленные события)?
3 ответа
Это была структурная ошибка! Я положил classes
папка, содержащая observer.php
в db
папка! После перемещения classes
Папка в корне плагина следующим образом, это нормально, наблюдатель запущен!
Структура, которая в порядке:
redirectafterlogin/
├── classes
│ └── observer.php
├── db
│ └── events.php
└── version.php
Я не думаю, что автоматическая загрузка классов сможет найти ваш класс наблюдателя.
Попробуйте добавить в начало файла класса наблюдателя:
namespace local_redirectafterlogin;
Затем измените events.php на:
'callback' => 'local_redirectafterlogin\local_redirectafterlogin_observer'
(Вы также можете значительно сократить имя класса, теперь оно находится в пространстве имен). Убедитесь, что вы подняли номер версии, чтобы перезагрузить файл events.php.
Возможно, вы захотите пересмотреть наименование вашего плагина, так как перенаправление не разрешено из обработчика событий, так как это может вызвать множество проблем.
Я получил опыт, что var_dump или output do stdout получает не триггер. Для быстрой "отладки" я использую file_put_contents во временный лог-файл