Я определил метод в моем контроллере, где исходные данные сначала извлекаются, и если поле электронной почты присутствует в моей базе данных, я хотел бы вернуть представление. Однако, если поле электронной почты отсутствует, я хотел бы перенаправить на другой маршрут. Я также хотел бы передать входные данные этому маршруту.
Чтобы лучше понять, что я имею в виду, для моего контроллера мой код выглядит следующим образом:
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] );
Надеюсь, это полезно 🙂