web-dev-qa-db-fra.com

laravel jeter MethodNotAllowedHttpException

J'essaie d'obtenir quelque chose de très basique. J'ai l'habitude de travailler chez CI et j'apprends maintenant Laravel 4, et leur documentation ne facilite pas les choses! Quoi qu'il en soit, j'essaie de créer un formulaire de connexion et je m'assure simplement que les données sont correctement envoyées en l'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 itinéraires a:

Route::get('/', function()
{
    return View::make('hello');
});

Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');

et enfin mon point de vue login.php a cette forme de direction:

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

Toute aide est la bienvenue.

87
spacemonkey

Vous obtenez cette erreur parce que vous postez sur une route GET.

Je diviserais votre routage pour "valider" en une route séparée GET et POST Nouveaux itinéraires:

Route::post('validate', 'MemberController@validateCredentials');

Route::get('validate', function()
{
    return View::make('members/login');
});

Ensuite, votre méthode de contrôleur pourrait simplement être

public function validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
180
hayhorse

Le problème est que vous utilisez POST mais vous devez en réalité exécuter PATCHPour résoudre ce problème, ajoutez

<input name="_method" type="hidden" value="PATCH">

Juste après la ligne Form :: model

22
Eli

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 requête 'get' mais le formulaire envoie probablement une requête 'post'. Changez la définition de votre itinéraire.

Route::post('/validate', 'MemberController@validateCredentials');

Il est généralement préférable d’utiliser des itinéraires nommés (aide à faire évoluer la méthode/la classe du contrôleur). 

Route::post('/validate', array('as' => 'validate', 
    'uses' => 'MemberController@validateCredentials'));

Dans le formulaire, utilisez ce qui suit

<?php echo Form::open(array('route' => 'validate')); ?>
18
Blessing

MethodNotAllowedHttpException arrive généralement quand, 

méthode de route ne correspond pas. 

Supposons que vous définissiez le fichier de route POST request, mais que vous envoyiez GET Request à la route. 

8

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

par défaut, Form::open() assume la méthode POST.

vous avez dans vos itinéraires. remplacez-le par post dans l'itinéraire correspondant.

ou si vous souhaitez utiliser la méthode get, ajoutez le paramètre method.

par exemple.

Form::open(array('url' => 'foo/bar', 'method' => 'get'))

7
itachi

En effet, vous publiez des données via une méthode get.

Au lieu de

Route::get('/validate', 'MemberController@validateCredentials');

Essaye ça

Route::post('/validate', 'MemberController@validateCredentials');
6
Piyumika Sewwandi

J'ai fait face à l'erreur,
problème était FORM METHOD  

 {{Form :: open (array ('url' => 'admin/doctor/edit /'.$ doctor-> doctor_id,' class '=>' form-horizontal forme-bordée form-rangée-ligne-stripped ',' méthode '=>' PUT ',' fichiers '=> true))}} 

ça devrait être comme ça 

 {{Form :: open (array ('url' => 'admin/doctor/edit /'.$ doctor-> doctor_id,' class '=>' form-horizontal forme-bordée form-rangée-ligne-stripped ',' méthode '=>' POST ',' fichiers '=> true))}} 
4
Faruk Omar

En général, il existe une erreur dans le verbe HTTP utilisé, par exemple: Appel de la route PUT avec POST request

3
Slimane MEHARZI

Dans mon cas, j'envoyais une demande POST via HTTP à un serveur sur lequel j'avais configuré nginx pour rediriger toutes les demandes sur le port 80 sur le port 443 sur lequel je servais de l'application via HTTPS.

Faire la demande au bon port a directement résolu le problème. Dans mon cas, tout ce que je devais faire est de remplacer (http: //) dans l'URL de la demande (https: //) puisque j'utilisais les ports par défaut 80 et 443, respectivement.

3
iSWORD

Mon problème n'était pas que mes itinéraires étaient configurés de manière incorrecte, mais que je faisais référence à la mauvaise méthode Form (que j'avais copiée à partir d'un formulaire différent). Je faisais...

{!! Form::model([ ... ]) !!}

(sans modèle spécifié). Mais j'aurais dû utiliser la méthode open régulière ...

{!! Form::open([ ... ]) !!}

Étant donné que le premier paramètre de model attend un modèle réel, aucune option que je spécifiais n'a été spécifiée. J'espère que cela aidera quelqu'un qui sait que ses itinéraires sont corrects, mais quelque chose ne va pas.

2
philthathril

eh bien, quand j'ai eu ce problème, j'ai fait face à 2 erreurs de code {!! Form::model(['method' => 'POST','route' => ['message.store']]) !!} Je l'ai corrigé en faisant ceci {!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

donc juste pour expanciate j'ai changé la forme model à open et aussi la route où mal placé entre accolades carrées.

0
Fillz Adebayo

Dans mon cas, c'était parce que mon formulaire envoyait un itinéraire avec un middleware différent. Donc, il a empêché d'envoyer des informations à cette route spécifique.

0
GabrielFiel

Parfois, Laravel ne supporte pas {!! 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-dessous 

{!! Form::open(array('route' => 'posts.store')) !!}




Code d'erreur {!! Form::open(['url' => 'posts/store']) !!}

Code correct {!! Form::open(array('route' => 'posts.store')) !!}

0
Ariful Islam