web-dev-qa-db-fra.com

MethodNotAllowedHttpException dans la ligne 219 de RouteCollection.php

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 ..

14
feknaz

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');
9
Jeff Lambert

Essayez d’ajouter à votre modèle: protected $guarded = ['_token'];

1
PawelW

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.

0
Nick F

Vérifiez votre étiquette de formulaire

<form action="/path/" method="post">

ici "/chemin/" devrait être "/chemin ", ne pas utiliser "/" à la fin.

0
Ahmet Uğur

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. 

0
srivat1