2017-03-31 99 views
0

不會觸發我創建了一個插件在這個位置moodle/local/redirectafterlogin結構如下:Moodle的事件觀察本地插件

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中有沒有辦法查看調度事件)?

回答

0

這是一個結構錯誤!我把classes文件夾中的observer.php放在db文件夾中! 如下所示,將classes文件夾移動到插件根目錄後,就可以了,觀察者被觸發!

結構是確定的:

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

我做了var_dump或者輸出做stdout的經驗不會得到trigggert。作爲快速「調試」我使用file_put_contents到臨時日誌文件

0

我不認爲自動類加載將能夠找到您的觀察員類。

嘗試增加觀察者類文件的頂部:

namespace local_redirectafterlogin; 

然後改變events.php到:

'callback' => 'local_redirectafterlogin\local_redirectafterlogin_observer' 

(您也大大縮短類名,現在是命名空間中)。確保你碰到版本號,重新加載events.php文件。

但是,您可能想重新考慮您的插件的命名,因爲在事件處理程序中不允許重定向,因爲這會導致很多問題。

+0

該插件的目的只是重定向到一個'用戶/ edit.php'頁面時,一些額外的個人資料欄不填寫。 爲什麼你說事件處理程序中不允許重定向?在我看來,核心\事件\ user_loggedin'事件分派執行這種操作?不是嗎? –

+0

事件往往是通過某些處理的一部分進行的(例如,您可能有一個創建新用戶的插件,然後在課程中引用它們 - 這會觸發'user_created'事件,然後再發生'user_enrolment_created'事件;或者,創建多個用戶帳戶的腳本會生成多個事件)。事件也可能由多個處理程序處理。如果您允許事件處理程序通過該處理重定向部分路徑,那麼該網站可能會處於非常壞的狀態。 – davosmith