Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
Ответы перенаправления - это экземпляры класса 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
. Например, для создания RedirectResponse
к именованному маршруту вы можете использовать метод route
:
return redirect()->route('login');
Если ваш маршрут имеет параметры, вы можете передать их вторым аргументом методу route
:
// Для маршрута с URI: profile/{id} return redirect()->route('profile', ['id' => 1]);
Для удобства Laravel также предлагает глобальную функцию to_route
:
return to_route('profile', ['id' => 1]);
Если вы перенаправляетесь на маршрут с параметром "ID", который заполняется из модели Eloquent, вы можете передать саму модель. ID будет извлечен автоматически:
// Для маршрута с URI: profile/{id} return redirect()->route('profile', [$user]);
Если вы хотите настроить значение, которое будет помещено в параметр маршрута, вы должны переопределить метод getRouteKey
в вашей модели Eloquent:
/** * Получить значение ключа маршрута модели. */public function getRouteKey(): mixed{ return $this->slug;}
Вы также можете создавать перенаправления на действия контроллеров. Для этого передайте контроллер и имя действия методу action
:
use App\Http\Controllers\HomeController; return redirect()->action([HomeController::class, 'index']);
Если ваш маршрут контроллера требует параметры, вы можете передать их вторым аргументом методу action
:
return redirect()->action( [UserController::class, 'profile'], ['id' => 1]);
Перенаправление на новый URL и запись данных в сессию обычно выполняются одновременно. Обычно это делается после успешного выполнения действия, когда записывается успешное сообщение в сессию. Для удобства вы можете создать экземпляр RedirectResponse
и записать данные в сессию в одной цепочке методов:
Route::post('/user/profile', function () { // Обновить профиль пользователя... return redirect('/dashboard')->with('status', 'Profile updated!');});
Вы можете использовать метод withInput
, предоставленный экземпляром RedirectResponse
, чтобы записать данные ввода текущего запроса в сессию перед перенаправлением пользователя на новое местоположение. После записи ввода в сессию вы можете легко извлечь его во время следующего запроса:
return back()->withInput();
После перенаправления пользователя вы можете отобразить сообщение из сессии. Например, с использованием синтаксиса Blade:
@if (session('status')) <div class="alert alert-success"> {{ session('status') }} </div>@endif