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.
url
aparece el error?php artisan dump-autoload
?Respuestas:
Recibes ese error porque estás publicando en una
GET
ruta.Dividiría su enrutamiento
validate
en rutas separadasGET
yPOST
.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
GET
solicitud, pero el formulario probablemente envía unaPOST
solicitud. 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,
POST
pero en realidad debe realizarPATCH
Para solucionar este complementoJusto después de la
Form::model
lí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::resource
que se encarga deGET
,POST
y otras solicitudes.En mi caso dejé mi ruta como está:
Y simplemente modifiqué mi formulario para enviarlo a la
store
función en miFilesController
Esto 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
POST
ruta. Esta es una opción pero no es necesaria.fuente
Suele
MethodNotAllowedHttpException
ocurrir cuandoSuponga que define el
POST
archivo de ruta de solicitud, pero envía laGET
solicitud a la ruta.fuente
de forma predeterminada,
Form::open()
asume unPOST
método.tienes
GET
en tus rutas. cámbielo aPOST
en la ruta correspondiente.o si desea utilizar el
GET
método, agregue elmethod
pará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
POST
solicitudHTTP
a un servidor donde había configuradoNginx
para redirigir todas las solicitudes de un puerto80
a otro443
donde 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 predeterminados80
y443
respectivamente.fuente
Generalmente, hay un error en el verbo HTTP utilizado, por ejemplo:
PUT
Ruta de llamada conPOST
solicitudfuente
Mi problema no fue que mis rutas se configuraron incorrectamente, sino que estaba haciendo referencia al
Form
método incorrecto (que había copiado de un formulario diferente). Estaba haciendo...(sin modelo especificado). Pero debería haber estado usando el
open
método regular ...Debido a que el primer parámetro que
model
esperaba 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.php
tení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
model
deopen
y también la ruta, donde colocó erróneamente entre corchetes.fuente
fuente