Версия фреймворка: 5.4 4.2

HTTP редиректы

Создание редиректов

Отклики для редиректов — это экземпляры класса Illuminate\Http\RedirectResponse; они содержат соответствующие заголовки, необходимые для переадресации пользователя на другой URL. Есть несколько способов создания экземпляров RedirectResponse. Самый простой способ - использовать глобальный хелпер redirect:

Route::get('dashboard', function () {
    return redirect('home/dashboard');
});

Иногда необходимо перенаправить пользователя в предыдущее место, например, когда в отправленной форме обнаружены ошибки. Вы можете сделать это с помощью глобального хелпера back. Так как для этой функции используются сессии, убедитесь в том, что вызывающий функцию back роут использует группу посредников web или использует всех посредников сессий:

Route::post('user/profile', function () {
    // Проверка запроса...

    return back()->withInput();
});

Редиректы на именованные роуты

При вызове хелпера redirect без параметров возвращается экземпляр Illuminate\Routing\Redirector, позволяя вам вызывать любой метод на экземпляре Redirector. Например, вы можете использовать метод route, чтобы сгенерировать RedirectResponse на именованный роут:

return redirect()->route('login');

Если у вашего роута есть параметры, то вы можете передать их в качестве второго аргумента метода route:

// Для роута со следующим URI: profile/{id}

return redirect()->route('profile', ['id' => 1]);

Получение параметров из моделей Eloquent

Если вы делаете переадресацию на роут с параметром "ID", который был получен из модели Eloquent, то вы можете просто передать саму модель. ID будет извлечён автоматически:

// Для роута со следующим URI: profile/{id}

return redirect()->route('profile', [$user]);

Если вы хотите изменить значение, которое помещается в параметр роута, вам надо переопределить метод getRouteKey в вашей модели Eloquent:

/**
 * Получить значение ключа роута модели.
 *
 * @return mixed
 */
public function getRouteKey()
{
    return $this->slug;
}

Редиректы на методы контроллера

Также вы можете создать редиректы на методы контроллера. Для этого передайте контроллер и имя метода контроллера в метод action. Помните, что вам не надо указывать полное пространство имён контроллера, потому чтоRouteServiceProvider Laravel автоматически задаст его сам:

return redirect()->action('HomeController@index');

Если роуту вашего контроллера нужны параметры, то вы можете передать их вторым аргументом метода action:

return redirect()->action(
    'UserController@profile', ['id' => 1]
);

Редирект с данными сессии

Редирект на новый URL и передача данных в сессию обычно происходят одновременно. Обычно это делается после успешного выполнения действия, когда вы передаёте в сессию сообщение об успехе. Для удобства вы можете создать экземпляр RedirectResponse и передать данные в сессию в одной цепочке вызовов:

Route::post('user/profile', function () {
    // Обновление профайла юзера...

    return redirect('dashboard')->with('status', 'Profile updated!');
});

Когда пользователь переадресован, то вы можете вывести сообщение из сессии. Например, используя синтаксис Blade:

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif