无法在 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),因为此事件是从那里触发的。如果被触发,那么这意味着您的代码正在运行,但没有效果。
我在用户文件中的代码-
我正在尝试 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),因为此事件是从那里触发的。如果被触发,那么这意味着您的代码正在运行,但没有效果。