МетодNotAllowedHttpException в строке RouteCollection.php 219
Когда я сохраняю сообщение, я получаю эту ошибку
MethodNotAllowedHttpException in RouteCollection.php line 219:
Что может вызвать эту проблему?
routes.php:
Route::get('home', '[email protected]');
Route::get('/', '[email protected]');
Route::get('index', '[email protected]');
Route::get('posts', '[email protected]');
Route::get('post/{slug}/{id}', '[email protected]');
Route::get('posts/sukurti-nauja-straipsni', '[email protected]');
Route::patch('posts/store-new-post', '[email protected]');
Route::get('post/{slug}/{id}/edit', '[email protected]');
Route::patch('posts/{slug}', '[email protected]');
Route::get('tags/{tags}', '[email protected]');
Route::get('categories/{categories}', '[email protected]');
// Authentication routes...
Route::get('auth/login', 'Auth\[email protected]');
Route::post('auth/login', 'Auth\[email protected]');
Route::get('auth/logout', 'Auth\[email protected]');
// Registration routes...
Route::get('auth/register', 'Auth\[email protected]');
Route::post('auth/register', 'Auth\[email protected]');
Я использую Laravel 5.1, и я не могу понять это в течение дня.
Ответы
Ответ 1
Поскольку вы устанавливаете метод в пост-обновлении как 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', '[email protected]');
Route::post('posts/{slug}', '[email protected]');
Ответ 2
Попробуйте добавить к вам модель:
protected $guarded = ['_token'];
Ответ 3
У меня тоже была эта проблема, но в моем случае это оказалось связано с тем, что эти множественные маршруты настроены на одно и то же действие контроллера:
Route::get('/', '[email protected]');
Route::get('posts', '[email protected]');
Это работало отлично для запросов GET, но я бы поставил свою форму, чтобы представить себе – то есть. Я не указал действие в моей форме – это означало, что если бы я был на /posts
, это сработало (так как я установил подходящую конечную точку POST для этого маршрута), но с домашней страницы /
он всегда выдавал мне описанное MethodNotAllowedHttpException (потому что для этого не установлен маршрут данных POST). Потребовались годы, чтобы понять, почему форма, казалось, иногда работает, а иногда и нет.
В конце я исправил его, изменив маршрут для /
на перенаправление, например:
Route::get('/', function(){
return redirect('posts');
});
... хотя я предполагаю, что явное указание действия в форме (или установка маршрута POST для /
тоже) тоже выполнило бы работу.
Я новичок в Laravel, поэтому могут быть другие подходы, которые лучше, чем любой из вышеперечисленных!
Ответ 4
Перейдите к поставщику /laravel/framework/src/Illuminate/Foundation/Middleware/VerifyCsrfToken.php и добавьте метод маршрута, который вы хотите (POST, GET) в функции isReading().
Надеюсь, это поможет кому-то.
Ответ 5
Проверьте тег формы
<form action="/path/" method="post">
здесь "/путь/" должен быть "/путь", не используйте "/" в конце.
Ответ 6
В моем случае в конце было добавлено "/", что-то вроде: POST/api/clients/Я удалил его и работал: POST/api/clients