如何从OctoberCMS插件中的事件处理程序重定向?

时间:2019-05-08 08:22:24

标签: octobercms octobercms-plugins

我已在插件的启动事件中为“ 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语句,该语句在不带重定向的情况下显示一个警告框,提示“错误”

1 个答案:

答案 0 :(得分:0)

您可以使用Logout Ajax链接的data属性重定向到所需的任何位置。请检查以下示例。 [要使其正常工作,您需要将会话组件添加到页面中]

检查更多信息:https://octobercms.com/plugin/rainlab-user#documentation

<a data-request="onLogout" 
   data-request-data="redirect: 'https://www.google.com'"
>
   Sign out
</a>
  

如果您仍想使用事件重定向用户,则可以使用以下代码。注意:这类骇人听闻的方法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对象数据。因此您的return语句对此没有影响。

内容: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);
}

如有疑问,请发表评论。