Comprobar que haya un request en una ruta post

publicado por: Anonymous

tengo un formulario en la pagina localhost:8000/package que se envia a la url localhost:8000/book mediante el metodo post, todo funciona perfecto, pero si en la barra de direcciones escribo localhost:8000/book y doy enter me arroja el siguente error

MethodNotAllowedException
at RouteCollection->methodNotAllowed(array('POST'))in RouteCollection.php (line 238)

Creo que es porque cuando envio el formulario se envian los parametros para la ruta localhost:8000/book mediante post, y cuando quiero entrar directamente a la url como no hay parametros que se envian, me marca ese error.

¿Como puedo hacer una validación en la ruta diciendole que si no hay $request o parametros me haga un redirect a otra url? Esto como una forma de proteger la url y no permitir a los usuarios quen entren a esta.

solución

De hecho la excepción de método no permitido es casi una forma de proteger la URL.

Esto ocurre porque al escribir la URL en el navegador estás haciendo una petición de tipo GET, mientras con el formulario haces una petición POST.

“La protección” frente a esos usuarios que podrían intentar enviar información directamente al script por medio de POST la da el token que seguramente debiste haber incluido de alguna forma en el formulario. Ver https://laravel.com/docs/5.4/csrf

Si definitivamente deseas hacer una redirección de la URL cuando envían petición por medio de GET, entonces debes agregar la ruta respectiva y simplemente pasar una redirección en el controlador que recibe la petición.

Por si acaso, SIEMPRE existe un request cada vez que ingresas a una “URL”, sin importar el verbo, ¿tal vez te refieres a verificar que haya un dato o un valor?


Voy a dar más detalles según lo que necesita el OP:

Route::get('book', '[email protected]');

En el controlador:

public function metodo(Request $request)
{
    return redirect()->route('home');
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *