Редиректы (RedirectResponse)
Редирект - это перенаправления пользователя с одной страницы на другую. Они реализуются через объект Imhotep\Http\RedirectResponse, который формирует корректные HTTP-заголовки для перехода. Для быстрого создания ответа используйте хелпер redirect():
// Временный редирект (302)
return redirect('/new-page');
// Постоянный редирект (301)
return redirect()->to('/new-page', 301);
Редирект на именованные маршруты
Для перенаправления на именованный маршрут, вызовете хелпер redirect()->route():
Route::get('/login')->name('login')
return redirect()->route('login');
Если маршрут имеет параметры, передайте их вторым аргументом:
Route::get('/profile/{id}')->name('profile')
return redirect()->route('profile', ['id' => 1]);
// Перенаправит на: /profile/1
Редирект к действиям контроллера
Для перенаправления на действие контроллера, вызовете хелпер redirect()->action():
use App\Http\Controllers\PageController;
return redirect()->action([PageController::class, 'index']);
Если маршрут имеет параметры, передайте их вторым аргументом:
use App\Http\Controllers\PageController;
return redirect()->action([PageController::class, 'show'], ['id' => 1]);
Редирект на внешние домены
Для перенаправления пользователя на домен за пределами вашего приложения, воспользуйтесь методом redirect()->away():
return redirect()->away('https://example.com');
Редирект на предыдущую страницу
Удобно возвращать пользователя туда, откуда он пришёл:
return redirect()->back();
Редирект с данными
При обработке форм часто нужно не просто перенаправить пользователя, но и передать сообщение о результате операции. Для этого используется метод with() или withInput() - они сохраняют данные в сессию пользователя однократно (flash-данные).
Route::post('/user/profile', function () {
// Обновление профиля
return redirect('/profile')->withInput()->with('error', 'Email already taken.');
});
Во view данные доступны глобально через функцию session():
<input type="email" name="email" value="{{ old('email') }}" />
@if (session('error'))
<div class="alert alert-error">
{{ session('error') }}
</div>
@endif
Flash-данные существуют только до следующего запроса — при обновлении страницы сообщение исчезнет.