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.
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;
}
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
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')); ?>
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.
<?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'))
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');
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))}}
En général, il existe une erreur dans le verbe HTTP utilisé, par exemple: Appel de la route PUT avec POST request
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.
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.
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.
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.
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')) !!}