Lorsque je stocke un message, j'obtiens cette erreur
MethodNotAllowedHttpException in RouteCollection.php line 219:
Qu'est-ce qui peut causer ce problème ??
Routes.php:
Route::get('home', 'PostsController@index');
Route::get('/', 'PostsController@index');
Route::get('index', 'PostsController@index');
Route::get('posts', 'PostsController@index');
Route::get('post/{slug}/{id}', 'PostsController@show');
Route::get('posts/sukurti-nauja-straipsni', 'PostsController@create');
Route::patch('posts/store-new-post', 'PostsController@store');
Route::get('post/{slug}/{id}/edit', 'PostsController@edit');
Route::patch('posts/{slug}', 'PostsController@update');
Route::get('tags/{tags}', 'TagsController@show');
Route::get('categories/{categories}', 'CategoriesController@show');
// Authentication routes...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
// Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');
J'utilise Laravel 5.1 et je n'arrive pas à comprendre cela pendant un jour ..
Puisque vous définissez la méthode sur la mise à jour de la publication sur patch
, assurez-vous de ouvrir votre formulaire pour utiliser cette méthode:
{!! Form::open(['method' => 'patch']) !!}
Si vous n'utilisez pas la classe Form
, vous pouvez également vous assurer qu'il y a un élément caché appelé _method
sous le formulaire:
<input name="_method" type="hidden" value="PATCH">
De même, si vous envoyez ces données via AJAX, ajoutez simplement une clé _method
à la charge utile définie sur 'PATCH'
avant d'envoyer la demande via POST. Certains navigateurs ( IE 7/8 ) ne prennent pas en charge PATCH HTTP via XMLHttpRequest
L’autre option consiste à modifier votre itinéraire pour accepter les données POST]:
Route::post('posts/store-new-post', 'PostsController@store');
Route::post('posts/{slug}', 'PostsController@update');
Essayez d’ajouter à votre modèle: protected $guarded = ['_token'];
J'avais aussi ce problème, mais dans mon cas, cela était dû au fait que ces multiples routes étaient configurées pour la même action de contrôleur:
Route::get('/', 'PostsController@index');
Route::get('posts', 'PostsController@index');
Cela a bien fonctionné pour les demandes GET, mais j’avais configuré mon formulaire pour se soumettre lui-même - c.-à-d. Je n'avais pas spécifié d'action dans mon formulaire - ce qui signifiait que si j'étais sur /posts
cela fonctionnait (puisque j'avais configuré un noeud final POST approprié pour cet itinéraire), mais à partir de la page d'accueil /
, il me donnerait toujours l’exception MethodNotAllowedHttpException que vous décrivez (car il n’y avait pas de route de données POST configurée pour cela). Il a fallu beaucoup de temps pour comprendre pourquoi la forme semblait parfois fonctionner et parfois pas.
En fin de compte, j'ai résolu le problème en modifiant l'itinéraire pour /
dans une redirection, comme ceci:
Route::get('/', function(){
return redirect('posts');
});
... bien que j'imagine que définir explicitement une action sur le formulaire (ou définir un POST route pour /
également) aurait également fait l'affaire.
Je suis nouveau à Laravel, il pourrait donc y avoir d’autres approches qui sont meilleures que les précédentes.
Vérifiez votre étiquette de formulaire
<form action="/path/" method="post">
ici "/chemin/" devrait être "/chemin ", ne pas utiliser "/" à la fin.
Naviguez jusqu'au fournisseur/laravel/framework/src/Illuminate/Foundation/Middleware/VerifyCsrfToken.php et ajoutez la méthode de routage souhaitée (POST, GET) dans la méthode function isReading ().
J'espère que cela peut aider quelqu'un.