laravel jeter MethodNotAllowedHttpException
J'essaie d'obtenir quelque chose de très basique en cours d'exécution. Je suis habitué à CI et maintenant apprentissage Laravel 4, et leurs docs ne sont pas rendre facile! De toute façon, je suis en train de créer un formulaire de connexion et assurez-vous que les données sont affichées avec succès par l'impression du 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 routes a:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
et, enfin, de mon point de vue login.php a cette forme de direction:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Toute aide sera grandement appréciée.
- En ce qui
url
vous obtenez l'erreur? - Avez-vous essayé
php artisan dump-autoload
? - Vieux post mais les gens toujours tomber sur elle - essayer de "compositeur de vidage-autoload". A travaillé pour moi.
- cette commande, il n'est pas défini.
Vous devez vous connecter pour publier un commentaire.
Vous obtenez cette erreur, parce que vous postez un itinéraire.
Je voudrais diviser votre routage pour "valider" dans un autre POST et GET routes. De Nouvelles Lignes:
Alors votre méthode de contrôleur pourrait être simplement
Le problème, c'est que vous êtes à l'aide de POST, mais en fait vous avez à effectuer des PATCH
Pour résoudre ce ajouter
Juste après la Forme::modèle de la ligne de
{{ method_field('PATCH') }}
dans votre modèle.Mon soupçon est le problème réside dans votre définition de la route. Vous avez défini le parcours de 'get' demande, mais la forme est probablement l'envoi d'un 'post' demande. Changer votre définition de la route.
Il est généralement préférable d'utiliser des routes nommées (aide de l'échelle si la méthode de contrôleur/changements de classe).
Dans la forme, utilisez les éléments suivants
J'ai rencontré ce problème et d'autres réponses ici a été utile, mais je suis en utilisant un
Route::resource
qui prend soin deGET
,POST
, et d'autres demandes.Dans mon cas, j'ai quitté ma route comme est:
Route::resource('file', 'FilesController');
Et simplement modifié mon formulaire pour soumettre à la
store
fonction dans maFilesController
{{ Form::open(array('route' => 'file.store')) }}
Cela a réglé le problème, et j'ai pensé qu'il était intéressant de souligner qu'une réponse distincte étant donné que divers autres réponses suggèrent l'ajout d'un nouveau
POST
route. C'est une option, mais il n'est pas nécessaire.Généralement
MethodNotAllowedHttpException
il se passer lorsque,Supposons que vous définissez
POST
demande de fichier de route, mais vous envoiGET
Demande à la route.<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
par défaut,
Form::open()
supposePOST
méthode.vous avez dans votre parcours. changer de
post
dans la route correspondante.ou si vous souhaitez utiliser la méthode get, puis ajouter le
method
param.par exemple
Form::open(array('url' => 'foo/bar', 'method' => 'get'))
C'est parce que vous êtes à la publication des données par le biais d'une méthode get.
essayer cette
J'ai fait face à l'erreur,
le problème a été MÉTHODE du FORMULAIRE
il devrait en être ainsi
Généralement, il y a erreur dans le verbe HTTP utilisé par exemple:
L'appel de METTRE de la route avec une requête POST
Dans mon cas, j'ai été l'envoi d'une requête POST sur HTTP à un serveur où j'ai eu de configuration de nginx pour rediriger toutes les requêtes sur le port 80 vers le port 443 où j'étais à l'application du protocole HTTPS.
Faire la demande vers le bon port est 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 de (https://) depuis que j'ai été en utilisant la valeur par défaut les ports 80 et 443, respectivement.
Mon problème n'était pas que mes itinéraires ont été configurés de manière incorrecte, mais que je faisait référence à la mauvaise
Form
méthode (que j'ai copié à partir d'une forme différente). J'étais en train de faire...(sans modèle spécifié). Mais j'aurais dû utiliser le
open
méthode...Parce que le premier paramètre à
model
s'attendre à un modèle réel, il n'était pas un de mes options, j'ai été la spécification. Espérons que cela aide quelqu'un qui connaît leurs routes sont correctes, mais quelque chose ne va pas.j'ai fait la même erreur, mais il avait un autre correctif, dans mon XYZ.blade.php j'ai eu:
qui m'a donné l'erreur, - je ne comprends toujours pas pourquoi, mais quand je l'ai changé pour
{!! Form::open(array('route' => 'services.store')) !!}
il a travaillé!
je pensais que c'était le partage de la valeur 🙂
Laravel parfois ne prend pas en charge
{!! Form::open(['url' => 'posts/store']) !!}
pour des raisons de sécurité. C'est pourquoi l'erreur s'est passé. Vous pouvez résoudre cette erreur en remplaçant simplement le code ci-dessousCode D'Erreur
{!! Form::open(['url' => 'posts/store']) !!}
Code Correct
{!! Form::open(array('route' => 'posts.store')) !!}
Dans mon cas, c'était parce que ma forme était l'envoi d'un itinéraire avec un autre middleware. Donc, il s'est bloqué à partir de l'envoi d'informations à ce parcours.
bien quand j'ai eu ces problème, j'ai affronté 2 erreurs de code
j'ai corrigé en procédant de cette
donc, juste pour s'étendre, j'ai changé la forme
model
àopen
et aussi de la route où placés à tort dans des crochets.Dans Laravel 5.7 ou plus tard
Suit:
Exemple: