Как перенаправить маршрут с помощью метода контроллера

Я определил метод в моем контроллере, где исходные данные сначала извлекаются, и если поле электронной почты присутствует в моей базе данных, я хотел бы вернуть представление. Однако, если поле электронной почты отсутствует, я хотел бы перенаправить на другой маршрут. Я также хотел бы передать входные данные этому маршруту.

Чтобы лучше понять, что я имею в виду, для моего контроллера мой код выглядит следующим образом:

public function index(Request $request) { $credentials = $request->all(); if (\App\User::where('email','=',$credentials['email'])->exists()){ //if they are registered, return VIEW called welcome, with inputs return view('welcome', $credentials); } else{//If the user is not in the database, redirect to '/profile' route, //but also send their data return redirect('profile', $credentials); } 

И мой web.php выглядит следующим образом:

 Route::post('/profile', function() { $m = Request::only('email'); //I only need the email return view('profile', $m); }); 

Однако эта логика не с ошибками: «Код состояния HTTP« 1 »не определен». Есть ли все равно, чтобы сделать это правильно? (т. е. перейти от моего метода контроллера к другому маршруту?)

Вы можете использовать метод redirect() .

 return redirect()->route('route.name')->with(['email'=> 'abc@xys.com']); 

Поскольку использование with() с redirect() добавит «сообщение» на сеанс (не запрос) . Затем загрузите электронное письмо с помощью:

 request()->session()->get('email') //Or session('email') 

Вам нужно будет определить маршрут, к которому вы хотите redirect()

 return redirect()->route('profile')->with('credentials', $credentials); 

Параметр with параметром мигает данными на сеанс, к которым можно получить доступ, как если бы они были переданы непосредственно в представление.

Более подробную информацию о session и данные о мигании можно найти здесь .

Информацию о мигающих данных после перенаправления можно найти здесь .

В вашем случае вы можете использовать:

 return redirect()->route('profile')->with('email', $credentials['email']); 

По вашему мнению, вы можете использовать его так:

 @if(session()->has('email') We have the email of the user: {{ session('email') }} @endif 

Измените свой путь просмотра, как:

 return view('welcome', compact(credentials)); return redirect()->route('profile')->with('credentials',$credentials); 

В то время как @JithinJose вопрос дал ответ, я добавляю это как ответ для тех, кто рассматривает это в будущем, и кто не хочет иметь дело с получением таких вещей в сессии:

Не рекомендуемый способ сделать это – вызвать контроллер непосредственно из этого метода контроллера и передать необходимую ему переменную:

 $request->setMethod('GET'); //set the Request method $request->merge(['email' => $email]); //include the request param $this->index($request)); //call the function 

Это будет хорошо, если другой метод контроллера существует в пределах одного класса, иначе вам просто нужно получить необходимый вам метод и повторно использовать его.

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

 return redirect()->action( 'UserController@index', ['email' => $email] ); 

Надеюсь, это полезно 🙂