Создание переадресаций
Отклики для переадресации — это экземпляры класса 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
Laravel по-русски