Задать вопрос
@sintez007
начинающий кодер

Laravel 5.2 редирект на предыдущую страницу с сохранением get параметров?

Суть: на главной странице есть каталог изображений и фильтры для них (по типу, автору, цвету и т.д), которые передаются методом GET. Зарегистрированный пользователь может добавить их в корзину. Если пользователь не авторизован его по клику на кнопку "добавить в корзину" редиректит на страницу авторизации, а после ввода логина/пароля возвращает на главную. Вопрос - как вернуть его на главную с сохранением get-параметров, т.е. не на site.com а на site.com/?perPage=36&page=3&color=red
  • Вопрос задан
  • 381 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
greabock
@greabock
Могу
Например, в Laravel есть механизм intended. Можно посмотреть как он устроен, и сделать нечто подобное.
Нас конечно же больше всего интересуют методы guest и intended класса Illuminate\Routing\Redirector.

/**
     * Create a new redirect response, while putting the current URL in the session.
     *
     * @param  string  $path
     * @param  int     $status
     * @param  array   $headers
     * @param  bool    $secure
     * @return \Illuminate\Http\RedirectResponse
     */
    public function guest($path, $status = 302, $headers = [], $secure = null)
    {
        $this->session->put('url.intended', $this->generator->full());

        return $this->to($path, $status, $headers, $secure);
    }

   /**
     * Create a new redirect response to the previously intended location.
     *
     * @param  string  $default
     * @param  int     $status
     * @param  array   $headers
     * @param  bool    $secure
     * @return \Illuminate\Http\RedirectResponse
     */
    public function intended($default = '/', $status = 302, $headers = [], $secure = null)
    {
        $path = $this->session->pull('url.intended', $default);

        return $this->to($path, $status, $headers, $secure);
    }


Как мы можем наблюдать, ни какой черной магии здесь не происходит. Просто при перенаправлении на страницу аутентификации в сессию добавляется url. А после того как пользователь успешно прошел аутентификацию, делается перенаправление обратно на сохраненный ранее в сессии url.

Реализуйте схожий механизм со своими нюансами и будет вам счастье.

Вообще (если ваша задача описана в вашем вопросе в полной мере) будет вполне достаточно сделать так:
if(auth()->guest()) {
    session()->put('url.intended', url()->full());

    return redirect()->route('auth');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы