Главная Ларавел Laravel 5.* Redirect или перенаправление.

Ларавел


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' => 'Название статьи']);

На этом пока все, если появятся вопросы, задавайте в комментариях, обязательно отвечу.


Вы можете помочь развитию сайта отправив любую сумму

Комментарии

  1. Богдан
    19.10.2019 в 02:49

    То что надо, спасибо.

Написать комментарий