php - redireccionar - redirectresponse symfony
Cómo redirigir a una ruta desde un método de controlador (4)
He definido un método en mi controlador, donde primero se recuperan las entradas, 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 redireccionar 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: ''Código de estado HTTP'' 1 ''no está definido''. ¿Hay alguna forma de hacer esto correctamente? (es decir, pasar de mi método de control a otra ruta?)
Mientras que la pregunta de @JithinJose dio la respuesta, la agrego como respuesta para aquellos que consideran esto en el futuro, y que no quiere tratar con cosas como esta en la sesión:
Una forma no recomendada de hacerlo es llamar directamente al controlador desde este método de controlador y pasarle la variable que se necesita:
$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 control existe dentro de la misma clase, de lo contrario, solo tiene que obtener el método que necesita y reutilizarlo.
La mejor manera recomendada si desea 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 :)
Por favor, cambie su ruta de vista como:
return view(''welcome'', compact(credentials));
return redirect()->route(''profile'')->with(''credentials'',$credentials);
Puede usar el método redirect()
.
return redirect()->route(''route.name'')->with([''email''=> ''[email protected]'']);
Como usar with()
con redirect()
agregará ''email'' a la sesión (no solicitar) . Luego recupera el correo electrónico con:
request()->session()->get(''email'')
//Or
session(''email'')
Tendrá que definir la ruta a la que desea redirect()
return redirect()->route(''profile'')->with(''credentials'', $credentials);
La opción with
parpadea datos a la sesión a la que se puede acceder como si se pasara a la vista directamente.
Puede encontrar más información sobre la session
y los datos de actualización aquí .
La información con respecto a los datos de flasheo 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, podría usarlo como:
@if(session()->has(''email'')
We have the email of the user: {{ session(''email'') }}
@endif