octobercms - 如何从 OctoberCMS 插件中的事件处理程序重定向?
问题描述
我在插件的启动事件中为“rainlab.user.logout”注册了一个监听器。
public function boot()
{
Event::listen('rainlab.user.logout', function ($controller) {
return Redirect::to('https://www.google.com');
});
}
它什么也不做。我已通过使用确认流程正在到达此块
header("Location: https://www.google.com");
exit;
代替 return 语句,它会在没有重定向的情况下给出一个警告框说“错误” 。
解决方案
您可以使用 Logout Ajax 链接的数据属性重定向到任何您想要的地方。检查下面的例子。[为此,您需要将会话组件添加到您的页面]
检查更多信息:https ://octobercms.com/plugin/rainlab-user#documentation
<a data-request="onLogout"
data-request-data="redirect: 'https://www.google.com'"
>
Sign out
</a>
不过,如果您想使用事件来重定向用户,您可以使用下面的代码。注意:它是一种 hacky 方法
not recommended but yes it works
。
Event::listen('rainlab.user.logout', function ($controller) {
$_POST['redirect'] = 'https://www.google.com';
});
为什么您的方法不起作用[仅用于理解的额外内容]
因为在事件处理程序中他们没有捕获您从事件返回的任何数据,
returning Redirect
但在处理程序中他们没有捕获或接收它,这个事件rainlab.user.logout
只是触发并且让您不再访问$user
对象数据。所以你的退货声明对它没有影响。
内容:plugins/rainlab/user/components/Session.php
public function onLogout()
{
$user = Auth::getUser();
Auth::logout();
if ($user) {
Event::fire('rainlab.user.logout', [$user]);
// ^ see, nothing is here which can accept your return redirect.
}
$url = post('redirect', Request::fullUrl());
Flash::success(Lang::get('rainlab.user::lang.session.logout'));
return Redirect::to($url);
}
如果您有任何疑问,请发表评论。
推荐阅读
- java - java.lang.NoClassDefFoundError:解析失败:Lorg/spongycastle/util/Strings Android Studio
- ios - 如何使用系统图标图像设置 UIButton 内部的色调?
- apache-spark - 在 Palantir Foundry 中为特定类型的所有列创建期望
- flutter - 如何在颤动中导航到另一个类的方法
- python - 如何检查所有元素是否属于一组?
- pytorch - TorchScript 模型导出中的重复分支
- javascript - 如何获取我在柏树字段下插入的文本长度
- python - 不允许使用饼干机械汤
- plot - 在 Maple 中线性化,绘制微分方程系统的分岔?
- mysql - sql根据父表求和