Класс RedirectResponse
Класс RedirectResponse является реализацией HTTP-ответа с кодом перенаправления. Он используется для создания редиректов на различные URL-адреса, включая маршруты, именованные маршруты, внешние URL и предыдущий URL. Класс предоставляет методы для передачи данных в сессию, flash-сообщений и параметров запроса.
Объект класса возвращается при использовании глобальной функции redirect или фасада Route с методом redirect. Первым параметром может быть строка с URL, именованный маршрут или действие контроллера. Вторым параметром - HTTP-статус (по умолчанию 302).
Синтаксис
<?php
use Illuminate\Http\RedirectResponse;
// Базовый редирект
redirect($to, $status = 302, $headers = [], $secure = null): RedirectResponse
// Редирект на именованный маршрут
redirect()->route($route, $parameters = [], $status = 302, $headers = []): RedirectResponse
// Редирект с сохранением данных
redirect()->with($key, $value): RedirectResponse
// Редирект с сохранением ввода
redirect()->withInput(): RedirectResponse
?>
Пример
Давайте создадим редирект на главную страницу:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return redirect('/home');
});
?>
Пример
Выполним редирект на именованный маршрут с параметрами:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/user/{id}', function ($id) {
return view('user.profile', ['id' => $id]);
})->name('user.profile');
Route::get('/redirect-user', function () {
return redirect()->route('user.profile', ['id' => 5]);
});
?>
Результат выполнения кода при переходе по URL '/redirect-user':
"Перенаправление на /user/5"
Пример
Вернём пользователя на предыдущую страницу с сохранением ввода:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
class UserController extends Controller
{
public function store(Request $request): RedirectResponse
{
$validated = $request->validate([
'name' => 'required|string',
'email' => 'required|email'
]);
// Сохраняем данные пользователя
// ...
if ($someError) {
return back()->withInput()->withErrors(['error' => 'Ошибка сохранения']);
}
return redirect()->route('users.index')->with('success', 'User created');
}
}
?>
Пример
Выполним редирект с flash-сообщением в сессию:
<?php
use Illuminate\Support\Facades\Route;
Route::post('/login', function () {
// Проверка авторизации
// ...
return redirect('/dashboard')->with('status', 'Добро пожаловать!');
});
?>
Пример
Создадим редирект на внешний URL:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/external', function () {
return redirect()->away('https://example.com');
});
?>
Результат выполнения кода:
"Перенаправление на https://example.com"
Пример
Используем редирект с передачей нескольких flash-сообщений:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
class ProfileController extends Controller
{
public function update(Request $request): RedirectResponse
{
$user = auth()->user();
$user->update($request->only(['name', 'email']));
return redirect()
->route('profile.edit')
->with('success', 'Profile updated')
->with('info', 'Check your email for confirmation');
}
}
?>
Пример
Выполним редирект с добавлением параметров в URL:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/search', function (Request $request) {
$query = $request->input('q');
if (empty($query)) {
return redirect('/search')->withQuery([
'q' => 'default',
'sort' => 'desc'
]);
}
return view('search.results', ['query' => $query]);
});
?>