{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51}} == Создание переадресаций == Отклики для переадресации - это экземпляры класса %%Illuminate\Http\RedirectResponse%%, они содержат соответствующие заголовки, необходимые для переадресации пользователя на другой URL. Есть несколько способов создания экземпляров %%RedirectResponse%%. Простейший способ - использовать глобальную вспомогательную функцию %%redirect()%%: %% Route::get('dashboard', function () { return redirect('home/dashboard'); }); %% Иногда необходимо перенаправить пользователя в предыдущее место, например, когда в отправленной форме обнаружены ошибки. Вы можете сделать это с помощью глобальной вспомогательной функции %%back()%%. Поскольку для этого используются ((//docs/v5/session сессии)), убедитесь в том, что вызывающий функцию %%back()%% маршрут использует группу посредников %%(t)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]); %% **Получение параметров из моделей Eloquent** Если вы делаете переадресацию на маршрут с параметром %%(t)ID%%, который был получен из модели Eloquent, то вы можете просто передать саму модель. %%(t)ID%% будет извлечён автоматически: %% // Для маршрута со следующим URI: profile/{id} return redirect()->route('profile', [$user]); %% Если вы хотите изменить значение, которое помещается в параметр маршрута, вам надо переопределить метод %%getRouteKey()%% в вашей модели Eloquent: %% /** * Получить значение ключа маршрута модели. * * @return mixed */ public function getRouteKey() { return $this->slug; } %% == Переадресация на действия контроллера == Также вы можете создать переадресацию на ((//docs/v5/controllers действия контроллера)). Для этого передайте контроллер и имя действия в метод %%action()%%. Обратите внимание: вам не надо указывать полное пространство имён контроллера, потому что %%RouteServiceProvider%% задаст его сам: %% return redirect()->action('HomeController@index'); %% Если маршруту вашего контроллера нужны параметры, то вы можете передать их вторым аргументом метода %%action()%%: %% return redirect()->action( 'UserController@profile', ['id' => 1] ); %% == Переадресация с данными сессии == Обычно переадресация на новый URL происходит одновременно с ((//docs/v5/session#одноразовые передачей данных в сессию)). Обычно это делается после успешного выполнения действия, когда вы передаёте в сессию сообщение об успехе. Для удобства вы можете создать экземпляр %%RedirectResponse%% и передать данные в сессию в одной цепочке вызовов: %% Route::post('user/profile', function () { // Изменить профиль пользователя... return redirect('dashboard')->with('status', 'Профиль изменён!'); }); %% Когда пользователь переадресован, то вы можете вывести сообщение из ((//docs/v5/session сессии)). Например, с помощью ((//docs/v5/blade синтаксиса Blade)): %% @if (session('status'))
{{ session('status') }}
@endif %%