RouteCollection.php第219行中的MethodNotAllowedHttpException

时间:2015-09-25 15:29:51

标签: php laravel laravel-5.1

当我存储帖子时,我收到此错误

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,我无法解决这一问题......

6 个答案:

答案 0 :(得分:9)

由于您要将帖子的更新方法设置为patch,因此请务必open your form使用该方法:

{!! Form::open(['method' => 'patch']) !!}

如果您未使用Form课程,您还可以确保表单下方有hidden element called _method

<input name="_method" type="hidden" value="PATCH">

同样,如果您通过AJAX发送此数据,只需将_method密钥添加到设置为'PATCH'的有效负载,然后再通过POST发送请求。某些浏览器(IE 7/8)不支持通过XMLHttpRequest

的PATCH HTTP

您的另一个选择是更改路线以接受POST数据:

Route::post('posts/store-new-post', 'PostsController@store');
Route::post('posts/{slug}', 'PostsController@update');

答案 1 :(得分:1)

尝试添加到您的模型: protected $guarded = ['_token'];

答案 2 :(得分:0)

我也遇到了这个问题,但在我的情况下,原来是由于将这些多个路由设置为同一控制器操作:

Route::get('/',     'PostsController@index');
Route::get('posts', 'PostsController@index');

这适用于GET请求,但我设置我的表单以提交给自己 - 即。我没有在我的表单上指定一个操作 - 这意味着如果我在/posts上它有效(因为我为该路由设置了一个合适的POST端点),但是从主页/它总是会给我你描述的MethodNotAllowedHttpException(因为没有为此设置POST数据路由)。花了很长时间才弄清楚为什么这种形式有时似乎有效,有时却没有。

最后,我通过将/的路由更改为重定向来修复它,如下所示:

Route::get('/', function(){
    return redirect('posts');
});

...虽然我猜在表单上明确设置一个动作(或者为/设置一个POST路由)也可以完成这项工作。

我是Laravel的新手,所以可能还有其他方法比上述方法更好!

答案 3 :(得分:0)

导航到vendor / laravel / framework / src / Illuminate / Foundation / Middleware / VerifyCsrfToken.php并在函数isReading()方法中添加所需的路由方法(POST,GET)。

希望这可能有助于某人。

答案 4 :(得分:0)

检查表单标记

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

在这里&#34; / path / &#34;应该是&#34; / path &#34; ,不要使用&#34; / &#34;最后。

答案 5 :(得分:0)

在我的情况下,末尾有一个额外的“ /”,例如:POST / api / clients / 我已将其删除并开始工作:POST / api / clients