Redirect (перенаправление) в Laravel 5
Доброго времени суток. В данной статье я опишу такую замечательную функцию Laravel – redirect. Мы рассмотрим перенаправление пользователей на другие страницы или действие (action) с данными, так и без данных. Ну что, приступим…
Очень часто нам приходится перенаправлять пользователя на другую страницу или действие (action), например при неверно введенных данных в форме вернуть пользователя обратно.
Простое перенаправление
Например нам надо перенаправить пользователя на страницу page, http://website.loc/page
return redirect('page');
Или перенаправим пользователя на страницу авторизации http://website.loc/auth/login
return redirect('auth/login');
Перенаправление на предыдущую страницу
Например, пользователь ввел неверные данные в форму и отправил форму. После проверки мы выявили ошибки и нам необходимо перенаправить пользователя обратно на эту форму:
return redirect()->back();
Перенаправление с данными
Как в примере приведенном выше, при неверно введенных данных мы хотим перенаправить пользователя обратно на форму, но при этом вывести сообщение «Неверно введены данные»
return redirect()->back()->with('message','Неверно введены данные');
А в самом представлении (view) формы поймать это сообщение при помощи сессии:
@if(Session::has('message')) {{Session::get('message')}} @endif
Мы можем применять несколько методов with(), например:
return redirect()->back()->with('message','Неверно введены данные')->with('message2','Повторите ввод данных');
Но удобней в этом случае использовать массив:
$mess = ['message'=>'Неверно введены данные','message2'=>'Повторите ввод данных'; return redirect()->back()->with($mess);
Если мы перенаправляем пользователя обратно на форму, то мы можем перенаправить со старыми значениями для этого используем метод withInput()
return redirect()->back()->withInput();
А данные в форме мы можем получить данные используя функцию old(‘key’).
Перенаправление на именованный роут.
Например у нас есть именованный роут:
Route::get('page',['as' => 'showPage', 'uses' => 'PageController@show' ]);
Мы хотим перенаправить пользователя на данное действие не по ссылке, а по имени данного роута.
return redirect()->route('showPage');
Данный способ очень удобен. Если в дальнейшем мы захотим изменить структуру URL, то нам необходимо только подкорректировать файл route.php.
Если роут содержит параметр или группу параметров:
Route::get('page/{title}',['as'=>'showPage', 'uses'=>'PageController@show' ]);
или
Route::get('page/{category}/{title}',['as'=>'showPage', 'uses'=>'PageController@show' ]);
То мы можем использовать редирект на именованный роут:
return redirect()->route('showPage','Название статьи');
или соответственно
return redirect()->route('showPage',['category'=>'Категория', 'title'=>'Название статьи']);
Редирект на контролер и действие
Иногда необходимо перенаправить пользователя на конкретный метод контролера не используя URL. Для этого мы можем использовать полный путь к методу:
return redirect()->action('App\Http\Controllers\PageController@show');
Также мы можем передать параметры, просто добавив их в массив:
return redirect()->action('App\Http\Controllers\PageController@show',['category','title']);
Ну вот и все.