Создание переадресаций
Отклики для переадресации — это экземпляры класса PHPIlluminate\Http\RedirectResponse
, они содержат соответствующие заголовки, необходимые для переадресации пользователя на другой URL. Есть несколько способов создания экземпляров PHPRedirectResponse
. Простейший способ — использовать глобальную вспомогательную функцию PHPredirect()
:
Route::get('dashboard', function () {
return redirect('home/dashboard');
});
Иногда необходимо перенаправить пользователя в предыдущее место, например, когда в отправленной форме обнаружены ошибки. Вы можете сделать это с помощью глобальной вспомогательной функции PHPback()
. Поскольку для этого используются сессии, убедитесь в том, что вызывающий функцию PHPback()
маршрут использует группу посредников web или использует всех посредников сессий:
Route::post('user/profile', function () {
// Проверка запроса...
return back()->withInput();
});
Переадресация на именованные маршруты
При вызове вспомогательной функции PHPredirect()
без параметров возвращается экземпляр PHPIlluminate\Routing\Redirector
, позволяя вам вызывать любой метод на экземпляре PHPRedirector
. Например, чтобы создать PHPRedirectResponse
на именованный маршрут, вы можете использовать метод PHProute()
:
return redirect()->route('login');
Если у вашего маршрута есть параметры, то вы можете передать их в качестве второго аргумента метода PHProute()
:
// Для маршрута со следующим URI: profile/{id}
return redirect()->route('profile', ['id' => 1]);
Получение параметров из моделей Eloquent
Если вы делаете переадресацию на маршрут с параметром ID, который был получен из модели Eloquent, то вы можете просто передать саму модель. ID будет извлечён автоматически:
// Для маршрута со следующим URI: profile/{id}
return redirect()->route('profile', [$user]);
Если вы хотите изменить значение, которое помещается в параметр маршрута, вам надо переопределить метод PHPgetRouteKey()
в вашей модели Eloquent:
/**
* Получить значение ключа маршрута модели.
*
* @return mixed
*/
public function getRouteKey()
{
return $this->slug;
}
Переадресация на действия контроллера
Также вы можете создать переадресацию на действия контроллера. Для этого передайте контроллер и имя действия в метод PHPaction()
. Обратите внимание: вам не надо указывать полное пространство имён контроллера, потому что PHPRouteServiceProvider
задаст его сам:
return redirect()->action('HomeController@index');
Если маршруту вашего контроллера нужны параметры, то вы можете передать их вторым аргументом метода PHPaction()
:
return redirect()->action(
'UserController@profile', ['id' => 1]
);
Переадресация с данными сессии
Обычно переадресация на новый URL происходит одновременно с передачей данных в сессию. Обычно это делается после успешного выполнения действия, когда вы передаёте в сессию сообщение об успехе. Для удобства вы можете создать экземпляр PHPRedirectResponse
и передать данные в сессию в одной цепочке вызовов:
Route::post('user/profile', function () {
// Изменить профиль пользователя...
return redirect('dashboard')->with('status', 'Профиль изменён!');
});
Когда пользователь переадресован, то вы можете вывести сообщение из сессии. Например, с помощью синтаксиса Blade:
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif