Редиректы в Laravel

Приведём пример, который содержит глобальную вспомогательную функцию перенаправления - redirect. Допустим, что существует два маршрута:
<?php 
   Route::get('mouse/redir', 'MouseController@redir');
   Route::get('mouse/text', 'MouseController@text');
?>
И назначим этому контроллеру два действия. Одно будет что-нибудь выводить, а второе будет делать перенапрвление на первое:
<?php 
   namespace App\Http\Controllers;
   use App\Http\Controllers\Controller;
   class MouseController extends Controller {
      public function redir(){
         return redirect('mouse/text'); // перенаправляем на новый адрес
      }
      public function text(){
         return 'Тише, мыши, кот на крыше';
      }
   }
?>
Это пример простейшего редиректа.

Данные формы

Во время выполнения перенаправления через redirect можно одновременно отправлять данные формы. Делается это с помощью метода withInput:
<?php 
   return redirect('адрес')->withInput();
?>
Для получения отправленных данных можно использовать объект Request. Попробуем привести пример подобной передачи данных. Предположим, что есть небольшая форма:
<form action="mouse/result" method="get">
   <input type="text" name="food">
   <input type="submit">
</form>
Рассмотрим обработчик формы, который переадресует пользователя только в том случае, если в форму введено кодовое слово:
<?php 
   namespace App\Http\Controllers;
   use App\Http\Controllers\Controller;
   use Illuminate\Http\Request;
   class MouseController extends Controller {
      public function form(Request $request) {
         if ($request->has('food')) {
            $food = $request->input('food');
             
            if ($food == 'cheese') { // проверка условия
               // редирект, если верно
               return redirect('mouse/result')->withInput(); 
            } else { // условие не выполнено
               return view('mouse.form'); // показать форму
            }
         } else { // форма ещё не отправлена
            return view('mouse.form'); // показать форму
          }
      }
      
      public function result(Request $request) {
         return $request->input('food'); // показываем все принятые данные формы
      }
   }
?>
Если в форме использовался метод POST, то при редиректе с withInput пользователь попадёт на новый маршрут с методом POST. Это значит, что маршрут, на который будет переадресован пользователь должен разрешать метод POST (в Route::post). Иначе Laravel выдаст ошибку.
Иногда во время передачи данных появляется необходимость исключить какое-то поле из передаваемых данных. Это можно сделать в параметре метода withInput с помощью except:
<?php 
   return redirect('адрес')->withInput( $request->except('имя_поля') );
?>

Именованные маршруты

Маршрутам можно задавать имена, чтобы потом использовать эти имена в функции переадресации. Попробуем задать имя "food" для страницы со списком новостей о еде несколькими способами:
<?php
   Route::get('news/food', function () {
      // задание имени с помощью метода "name"
   })->name('food');

   Route::get('news/food', ['as' => 'profile', function () {
      // задание имени с помощью ключа массива "as"
   }]);

   // задание имени для действий контроллера
      Route::get('news/food', 'MouseController@showProfile')->name('profile');
?>
Для получения имени текущего маршрута можно использовать метод currentRouteName:
<?php 
   $name = Route::currentRouteName();
?>
Чтобы использовать переадресацию по имени можно воспользоваться методом route, которые возвращает URL соответствующий названию маршрута:
<?php 
   $url = route('food'); // возвращает URL страницы

   return redirect()->route('food'); // делает переадресацию
?>
При этом если у именованного маршрута есть параметры, то можно передать их вторым параметром в виде массива в метод route:
<?php 
   Route::get('news/{category}', function ($id) {
      //
   })->name('news');

   $url = route('news', ['category' => 'food']);
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх