Ларавел
Laravel 5.* Redirect или перенаправление.
В данном посте речь пойдет о функции Laravel – redirect. Мы рассмотрим перенаправление пользователей на другие страницы или действие (action) с данными, так и без данных.
Очень часто нам приходится отправлять пользователя на другую страницу или действие (action), например при неверно введенных данных в форме вернуть пользователя обратно, или после авторизации перенаправить на страницу (posts).
Простой редирект.
Например нам надо перенаправить пользователя на страницу page, http://site.com/page
В контроллере :
return redirect('page');
Или перенаправим пользователя на страницу авторизации http://site.com/auth/login (роут "auth/login" поставляется Laravel из "коробки" ):
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('message_2','Повторите
ввод');
Но удобней в этом случае использовать массив:
$mess = ['message'=>'Неверные данные','message2'=>'Повторите ввод';
return redirect()->back()->with($mess);
Если мы перенаправляем пользователя обратно на форму, то мы можем перенаправить со старыми значениями для этого используем метод withInput():
return redirect()->back()->withInput();
В этом случае на странице можно отобразить введенные данные:
@ if(Session::has('message'))
Session: :get('message')
@ endif
Перенаправление на именованный роут.
Например у нас есть именованный роут:
Route::get('page',['as' => 'showPage', 'uses' => 'HomeController@show' ]);
//или
Route::post('page', 'HomeController@show')->name('showPage');
Мы хотим перенаправить пользователя на данное действие не по ссылке, а по имени данного роута:
return redirect()->route('showPage');
Данный способ очень удобен. Если в дальнейшем мы захотим изменить структуру URL, то нам необходимо только подкорректировать файл route/web.php.
Если роут содержит параметр или группу параметров:
Route::get('page/{title}',['as'=>'showPage', 'uses'=>'HomeController@show' ]);
//или
Route::get('page/{category}/{title}',['as'=>'showPage', 'uses'=>'HomeController@show' ]);
То мы можем использовать редирект на именованный роут:
return redirect()->route('showPage','Название статьи');
//или соответственно
return redirect()->route('showPage',['category'=>'Категория', 'title'=>'Название статьи']);
Редирект на контролер и действие
Иногда необходимо перенаправить пользователя на конкретный метод контролера не используя URL. Для этого мы можем использовать путь к методу:
return redirect()->action('App\Http\Controllers\HomeController@show');
Также мы можем передать параметры, просто добавив их в массив:
return redirect()->action('App\Http\Controllers\HomeController@show',['category' => 'Категория','title' => 'Название статьи']);
На этом пока все, если появятся вопросы, задавайте в комментариях, обязательно отвечу.
Другие статьи:
То что надо, спасибо.