Estoy tratando de hacer funcionar algo muy básico. Estoy acostumbrado a CI y ahora estoy aprendiendo Laravel 4, ¡y sus documentos no lo hacen fácil! De todos modos, estoy tratando de crear un formulario de inicio de sesión y solo asegurarme de que los datos se publiquen correctamente imprimiéndolos en el siguiente formulario. Estoy recibiendo esta excepción:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
y mi MemberController.php:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
y rutas tiene:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
y finalmente mi vista login.php tiene esta dirección de formulario:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Cualquier ayuda será apreciada.

urlaparece el error?php artisan dump-autoload?Respuestas:
Recibes ese error porque estás publicando en una
GETruta.Dividiría su enrutamiento
validateen rutas separadasGETyPOST.Nuevas rutas:
Entonces su método de controlador podría ser simplemente
fuente
Mi sospecha es que el problema radica en la definición de su ruta.
Definió la ruta como una
GETsolicitud, pero el formulario probablemente envía unaPOSTsolicitud. Cambia la definición de tu ruta.En general, es una mejor práctica usar rutas con nombre (ayuda a escalar si cambia el método / clase del controlador).
En el formulario utilice lo siguiente
fuente
El problema es el que está utilizando,
POSTpero en realidad debe realizarPATCHPara solucionar este complementoJusto después de la
Form::modellíneafuente
{{ method_field('PATCH') }}en tu plantilla.Eso se debe a que está publicando datos a través de un método de obtención.
En vez de
Prueba esto
fuente
Me encontré con este problema también y las otras respuestas aquí eran útiles, pero estoy usando una
Route::resourceque se encarga deGET,POSTy otras solicitudes.En mi caso dejé mi ruta como está:
Y simplemente modifiqué mi formulario para enviarlo a la
storefunción en miFilesControllerEsto solucionó el problema, y pensé que valía la pena señalarlo como una respuesta separada, ya que varias otras respuestas sugieren agregar una nueva
POSTruta. Esta es una opción pero no es necesaria.fuente
Suele
MethodNotAllowedHttpExceptionocurrir cuandoSuponga que define el
POSTarchivo de ruta de solicitud, pero envía laGETsolicitud a la ruta.fuente
de forma predeterminada,
Form::open()asume unPOSTmétodo.tienes
GETen tus rutas. cámbielo aPOSTen la ruta correspondiente.o si desea utilizar el
GETmétodo, agregue elmethodparámetro param.p.ej
fuente
Me enfrenté al error, el
problema era FORM METHOD
Debería ser así
fuente
En mi caso, estaba enviando una
POSTsolicitudHTTPa un servidor donde había configuradoNginxpara redirigir todas las solicitudes de un puerto80a otro443donde estaba sirviendo la aplicaciónHTTPS.Hacer la solicitud al puerto correcto solucionó directamente el problema. En mi caso, todo lo que tuve que hacer es reemplazar
http://en la URL de solicitud a,https://ya que estaba usando los puertos predeterminados80y443respectivamente.fuente
Generalmente, hay un error en el verbo HTTP utilizado, por ejemplo:
PUTRuta de llamada conPOSTsolicitudfuente
Mi problema no fue que mis rutas se configuraron incorrectamente, sino que estaba haciendo referencia al
Formmétodo incorrecto (que había copiado de un formulario diferente). Estaba haciendo...(sin modelo especificado). Pero debería haber estado usando el
openmétodo regular ...Debido a que el primer parámetro que
modelesperaba un modelo real, no obtenía ninguna de mis opciones que estaba especificando. Espero que esto ayude a alguien que sepa que sus rutas son correctas, pero algo más está mal.fuente
También tuve el mismo error pero tuve una solución diferente, en mi
XYZ.blade.phptenía:que me dio el error, todavía no sé por qué, pero cuando lo cambié a
¡Funcionó!
Pensé que valía la pena compartirlo :)
fuente
Laravel a veces no es compatible
{!! Form::open(['url' => 'posts/store']) !!}por razones de seguridad. Por eso ha ocurrido el error. Puede resolver este error simplemente reemplazando el siguiente códigoCódigo de error Código
{!! Form::open(['url' => 'posts/store']) !!}correcto
{!! Form::open(array('route' => 'posts.store')) !!}fuente
En mi caso, fue porque mi formulario se estaba enviando a una ruta con un middleware diferente. Así que bloqueó el envío de información a esta ruta específica.
fuente
bueno, cuando tuve estos problemas, enfrenté 2 errores de código
lo corregí haciendo esto
por lo que sólo explayarse i cambiado la forma
modeldeopeny también la ruta, donde colocó erróneamente entre corchetes.fuente
fuente