J'essaie de faire fonctionner quelque chose de très basique. Je suis habitué à CI et j'apprends maintenant Laravel 4, et leurs documents ne me facilitent pas la tâche! Quoi qu'il en soit, j'essaie de créer un formulaire de connexion et de m'assurer simplement que les données sont publiées avec succès en les imprimant dans le formulaire suivant. Je reçois cette exception:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
et mon 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');
}
}
et les routes ont:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
et enfin ma vue login.php a cette direction de formulaire:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Toute aide sera fortement appréciée.
url
vous obtenez l'erreur?php artisan dump-autoload
?Réponses:
Vous obtenez cette erreur parce que vous publiez sur un
GET
itinéraire.Je diviserais votre itinéraire pour
validate
en unGET
et desPOST
itinéraires séparés .Nouveaux itinéraires:
Ensuite, votre méthode de contrôleur pourrait simplement être
la source
Je soupçonne que le problème réside dans la définition de votre itinéraire.
Vous avez défini l'itinéraire comme une
GET
demande mais le formulaire envoie probablement unePOST
demande. Modifiez la définition de votre itinéraire.Il est généralement préférable d'utiliser des routes nommées (aide à évoluer si la méthode / classe du contrôleur change).
Dans le formulaire, utilisez ce qui suit
la source
Le problème est que vous utilisez
POST
mais en fait vous devez effectuerPATCH
Pour résoudre ce problème, ajoutezJuste après la
Form::model
lignela source
{{ method_field('PATCH') }}
dans votre modèle.C'est parce que vous publiez des données via une méthode get.
Au lieu de
Essaye ça
la source
J'ai rencontré ce problème aussi bien et les autres réponses ici ont été utiles, mais je me sers d' un
Route::resource
qui prend en chargeGET
,POST
et d' autres demandes.Dans mon cas, j'ai laissé mon itinéraire tel quel:
Et simplement modifié mon formulaire pour le soumettre à la
store
fonction dans monFilesController
Cela a résolu le problème, et j'ai pensé qu'il valait la peine de le signaler comme une réponse distincte, car diverses autres réponses suggèrent d'ajouter une nouvelle
POST
route. C'est une option mais ce n'est pas nécessaire.la source
Cela
MethodNotAllowedHttpException
se produit généralement lorsqueSupposons que vous définissiez le
POST
fichier d'itinéraire de demande, mais que vous envoyiez uneGET
demande à l'itinéraire.la source
par défaut,
Form::open()
suppose unePOST
méthode.vous avez
GET
dans vos itinéraires. changez-le enPOST
dans l'itinéraire correspondant.ou si vous souhaitez utiliser la
GET
méthode, ajoutez lemethod
paramètre.par exemple
la source
J'ai fait face à l'erreur, le
problème était FORM METHOD
Ça devrait être comme ça
la source
Dans mon cas, j'envoyais une
POST
demandeHTTP
à un serveur sur lequel j'avais configuréNginx
pour rediriger toutes les demandes de port80
à port sur443
lequel je servais l'applicationHTTPS
.Faire la demande au bon port a directement résolu le problème. Dans mon cas, tout ce que j'avais à faire est de remplacer
http://
dans l'URL de la requête àhttps://
puisque j'utilisais les ports par défaut80
et443
respectivement.la source
Généralement, il y a une erreur dans le verbe HTTP utilisé, par exemple:
PUT
Itinéraire d' appel avecPOST
demandela source
Mon problème n'était pas que mes itinéraires étaient mal configurés, mais que je référençais la mauvaise
Form
méthode (que j'avais copiée à partir d'un autre formulaire). Je faisais...(sans modèle spécifié). Mais j'aurais dû utiliser la
open
méthode habituelle ...Parce que le premier paramètre à
model
attendre un modèle réel, il n'obtenait aucune de mes options que je spécifiais. J'espère que cela aide quelqu'un qui sait que ses itinéraires sont corrects, mais quelque chose ne va pas.la source
J'ai également eu la même erreur mais j'ai eu une solution différente, dans mon
XYZ.blade.php
j'avais:ce qui m'a donné l'erreur, - je ne sais toujours pas pourquoi - mais quand je l'ai changé en
Ça a marché!
J'ai pensé que ça valait le coup d'être partagé :)
la source
Laravel ne prend parfois pas en charge
{!! Form::open(['url' => 'posts/store']) !!}
pour des raisons de sécurité. C'est pourquoi l'erreur s'est produite. Vous pouvez résoudre cette erreur en remplaçant simplement le code ci-dessousCode d'erreur Code
{!! Form::open(['url' => 'posts/store']) !!}
correct
{!! Form::open(array('route' => 'posts.store')) !!}
la source
Dans mon cas, c'était parce que mon formulaire envoyait vers une route avec un middleware différent. Il a donc bloqué l'envoi d'informations sur cette route spécifique.
la source
bien quand j'ai eu ces problèmes, j'ai rencontré 2 erreurs de code
je l'ai corrigé en faisant ça
si juste pour épiloguer j'ai changé la forme
model
deopen
et aussi la voie où mal placée dans des crochets.la source
la source