Cómo redirigir a una ruta desde un método de controlador

He definido un método en mi controlador, donde las entradas se recuperan primero, y si el campo de correo electrónico está presente en mi base de datos, me gustaría devolver una vista. Sin embargo, si el campo de correo electrónico no está presente, me gustaría redirigir a otra ruta. También me gustaría pasar las entradas a esa ruta también.

Para entender mejor lo que quiero decir, mi código es el siguiente para mi controlador:

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); } 

Y mi web.php es el siguiente:

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

Sin embargo, esta lógica falla con errores: ‘El código de estado HTTP’ 1 ‘no está definido’. ¿Hay alguna manera de hacer esto correctamente? (es decir, ¿pasar de mi método de controlador a otra ruta?)

Puedes usar el método redirect() .

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

Ya que usar with() con redirect() agregará ‘correo electrónico’ a la sesión (no solicitud) . Luego recupera el correo electrónico con:

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

Si bien la pregunta @JithinJose dio la respuesta, estoy agregando esto como respuesta para aquellos que lo consideren en el futuro y que no quieran lidiar con obtener cosas como estas en la sesión:

Una forma no recomendada de hacer esto es llamar al controlador directamente desde este método de controlador y pasarle la variable necesaria:

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

Esto estará bien si el otro método de controlador existe dentro de la misma clase, de lo contrario, solo tiene que obtener el método que necesita y reutilizarlo.

La mejor forma recomendada para evitar la sesión es Redirigir a la acción del controlador, es decir:

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

Espero que sea útil 🙂

Deberá definir la ruta a la que desea redirect()

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

La opción with muestra datos de la sesión a los que se puede acceder como si se pasaran directamente a la vista.

Más información sobre la session y los datos de flasheo se pueden encontrar aquí .

La información sobre los datos intermitentes después de una redirección se puede encontrar aquí .

En tu caso podrías usar:

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

En su opinión, entonces podría usarlo como:

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

Por favor cambia tu ruta de vista como:

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