Когда я храню сообщение, я получаю эту ошибку
MethodNotAllowedHttpException in RouteCollection.php line 219:
Что может вызвать эту проблему?
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');
Я использую Laravel 5.1, и я не могу понять это на один день.
Поскольку вы устанавливаете метод обновления post, который должен быть patch
, убедитесь, что вы открыли форму для использования этого метода:
{!! Form::open(['method' => 'patch']) !!}
Если вы не используете класс Form
, вы также можете просто убедиться, что под формой находится скрытый элемент, называемый _method
:
<input name="_method" type="hidden" value="PATCH">
Аналогичным образом, если вы отправляете эти данные через AJAX, просто добавьте ключ _method
к набору полезных данных в 'PATCH'
перед отправкой запроса через POST. Некоторые браузеры ( IE 7/8 ) не поддерживают PATCH HTTP через XMLHttpRequest
Другой вариант – изменить маршрут, чтобы вместо этого принимать POST-данные:
Route::post('posts/store-new-post', 'PostsController@store'); Route::post('posts/{slug}', 'PostsController@update');
Попробуйте добавить к вам модель: protected $guarded = ['_token'];
У меня тоже была эта проблема, но в моем случае это оказалось связано с тем, что эти несколько маршрутов настроены на одно действие контроллера:
Route::get('/', 'PostsController@index'); Route::get('posts', 'PostsController@index');
Это отлично работало для запросов GET, но я поставил свою форму на себя, то есть. Я не указал действие в моей форме – это означало, что если бы я работал /posts
работал, он работал (так как я установил подходящую конечную точку POST для этого маршрута), но с домашней страницы /
она всегда давала бы мне MethodNotAllowedHttpException, которое вы описываете (поскольку для него не настроен маршрут данных POST). Потребовались годы, чтобы понять, почему форма, казалось, иногда срабатывает, а иногда и нет.
В конце концов я исправил его, изменив маршрут для /
в перенаправление, например:
Route::get('/', function(){ return redirect('posts'); });
… хотя я предполагаю, что явное указание действия на форму (или установка маршрута POST для /
слишком) также выполнило бы задание.
Я новичок в Laravel, поэтому могут быть другие подходы, которые лучше, чем любой из вышеперечисленных!
Перейдите к поставщику / laravel / framework / src / Illuminate / Foundation / Middleware / VerifyCsrfToken.php и добавьте метод маршрута, который вы хотите (POST, GET) в функции isReading ().
Надеюсь, это может помочь кому-то.
Проверьте тег формы
<form action="/path/" method="post">
здесь « / path / » должен быть « / path », не используйте « / » в конце.