Как перенаправить из обработчика событий в плагин OctoberCMS? - PullRequest
0 голосов
/ 08 мая 2019

Я зарегистрировал прослушиватель '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, который выдает окно с сообщением «error» без перенаправления.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете использовать атрибут данных Ajax-ссылки Logout для перенаправления в любое место.проверьте ниже пример.[, чтобы это работало, вам нужно добавить сессионный компонент на свою страницу ]

проверить дополнительную информацию: 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 данным объектаничего более.так что ваше возвращаемое заявление не влияет на него.

content : плагины / 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);
}

если у вас естьлюбые сомнения, пожалуйста, прокомментируйте.

...