← Заметки и статьи о Laravel PHP

27 июля 2015 перевод

Всё о редиректах в Laravel 5

В Laravel 5 встроена полезная функция redirect() для редиректа пользователей на различные страницы и действия с и без данных. Давайте рассмотрим эти различные способы редиректов, возможно, вы откроете для себя что-либо новое.

Во всех примерах мы будем использовать редиректы так, словно они являются возвращаемым результатом в методах контроллера.

Простой редирект

Здесь всё достаточно тривиально — например, наш сайт находится на домене www.website.com, редирект перенаправит его на домен + то, что вы укажете в параметре:

Редирект на www.website.com/homepage

return redirect('homepage');

Редирект на www.website.com/auth/login:

return redirect('auth/login');

Редирект на главную страницу:

return redirect('');

Цепочки методов и редирект назад

Если вы хотите перенаправить пользователя назад, на предыдущую страницу, можно воспользоваться методом back():

return redirect()->back();

Таким образом вы можете создавать цепочки методов к функции redirect().

Редирект с данными

Есть два способа передачи данных при редиректе. Первым является метод with():

return redirect()->back()->with('error', 'Something went wrong.');

Этот код добавит в сессию переменную с ключом error и значением Something went wrong, и вы сможете получить к ней доступ во вьюхе с помощью session('error'). Переменная стирается из сессии при следующем запросе.

Вы также можете добавить несколько методов with() подряд:

return redirect()->back()->with('error', 'Something went wrong.')->with('order_value', $value);

Но более предпочтительным методом будет использование массива:

$parameters = ['error' => 'Something went wrong.', 'order_value' => $value];
return redirect()->back()->with($parameters);

Если вы возвращаете пользователя назад, к форме, то можно использовать метод withInput():

return redirect()->back()->withInput();

Этот метод используется без параметров и сохраняет данные формы в сессии. Затем в форме вы можете получить доступ к значениям при помощи функции old($key).

Редирект к роуту

Если в вашем файле роутов указаны роуты с именами, вы можете редиректить пользователя к конкретному роуту:

app/Http/routes.php:

get('books', ['as' => 'books_list', 'uses' => 'BooksController@index']);

app/Http/Controllers/SomeController.php:

return redirect()->route('books_list');

Это очень полезно, если вы в будущем захотите поменять структуру URL — вам не нужно будет менять ни контроллеры, ни вьюхи, а только файл роутов.

Также вы можете указать параметры к роуту, если они есть:

app/Http/routes.php:

get('book/{id}', ['as' => 'book_view', 'uses' => 'BooksController@show']);

app/Http/Controllers/SomeController.php:

return redirect()->route('book_view', 1);

Если параметров несколько, то можно использовать массив:

app/Http/routes.php:

get('book/{category}/{id}', ['as' => 'book_view', 'uses' => 'BooksController@show']);

app/Http/Controllers/SomeController.php:

return redirect()->route('book_view', [513, 1]);

Также можно указать параметрам ключи:

return redirect()->route('book_view', ['category'=>513, 'id'=>1]);

Редирект к методу контроллера

И, наконец, мы можем редиректить пользователя к конкретному методу контроллера:

return redirect()->action('AppHttpControllersBooksController@index');

Также вы можете указать параметры для метода контроллера:

return redirect()->action('AppHttpControllersBooksController@show', [1]);

Заключение

Вот, в принципе, и всё, что нужно знать о редиректах в Laravel. Самое главное — это не редиректить пользователя на ту же страницу/действие бесконечным циклом. :)

Источник: http://laraveldaily.com/all-about-redirects-in-laravel-5/

Плюсануть
Поделиться
Отправить