无法在 joomla 3 中触发 onUserBeforeSave 事件

Not able to hit onUserBeforeSave event in joomla 3

我在用户文件中的代码-

我正在尝试 onUserBeforeSave,但是在这个事件中,Joomla 代码被执行,控制权没有到达我的代码:

class PlgUserotp extends JPlugin
{

 public function onUserBeforeSave($oldUser,$isnew,$newuser)
    {

       $errors = NULL;
        $phone_number = NULL;

        foreach ($newuser as $key => $value)
        {

            if($key=="username")
                $username = $value;
            elseif ($key=="email1") 
                $email = $value;
            elseif ($key=="password1") 
                $password = $value;
            else
                $extra_data[$key]=$value;
        }
            //echo $username . $email .$password; 

    $this->startVerificationProcess($username,$email,$errors,$phone_number,$password,$extra_data);
    //MoCurlOTP::mo_send_otp_token('EMAIL',$newuser["email1"],'');

    }
}

调试此问题的第一步是确保您的插件确实正在加载。先在最开始加个die('In my plugin');,看看是不是真的死了。如果是这样,那么这意味着 Joomla 确实在加载您的插件(如果没有,请检查您的插件是否已启用,同时检查系统 - 缓存插件是否已禁用,以防万一)。

下一步是确保 Joomla 正在实例化您的插件对象,这是通过添加 construct 方法,然后在该函数中添加 die('In constructor'); 来完成的。如果它没有显示此消息,则意味着您的 class 名称与 XML 清单文件中定义的 class 名称不一致。

最后一步是检查 onUserBeforeSave 是否真的被触发,方法是在函数的最开头添加 die('In onUserBeforeSave');。如果未触发,则尝试调试文件 libraries/src/User/User.php(我假设您使用的是 Joomla 3.8.x),因为此事件是从那里触发的。如果被触发,那么这意味着您的代码正在运行,但没有效果。