RouteCollection.php 行 200 中的 MethodNotAllowedHttpException:
MethodNotAllowedHttpException in RouteCollection.php line 200:
我这里有这些路由声明
//Skill
Route::get('skill','SkillController@index');
Route::get('skill/create','SkillController@create');
Route::post('skill/store','SkillController@store');
Route::get('skill/{id}','SkillController@show');
Route::get('skill/{id}/edit', 'SkillController@edit');
Route::post('skill/{id}/update','SkillController@update');
Route::delete('skill/{id}/destroy','SkillController@destroy');
有了这些路由,我可以在本地删除罚款。
当我尝试在生产环境中删除时,我一直收到
我确定,我有这条线
Route::delete('skill/{id}/destroy','SkillController@destroy');
- Local 和 Prod 具有相同的代码库。
- 本地 = Mac OS X
- 产品 = Ubuntu 服务器
我错过了什么?
由于您的问题仅出现在 linux 服务器的生产环境中,我认为这可能是 .htaccess 问题。
通常 Web 服务器将被配置为阻止除 GET 和 POST 之外的任何内容,因为 99% 的时间它们都是需要的,并且过去存在问题,应用程序假设请求是一个这两个。
您可以尝试使用
的 .htaccess
<Limit GET POST PUT DELETE>
Allow from all
</Limit>
(我不是 apache 专家,这可能不完全正确)
路由是从表单触发的...是吗?你的表单方法应该是 POST
,而不是 DELETE
然后你应该添加一个隐藏的输入,使它作为 DELETE
路由,从而帮助你维护 Route::delete()
。
您的表单应如下所示:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="DELETE">
你的路线:
Route::delete('skill/{id}/destroy','SkillController@destroy');
阅读 https://laravel.com/docs/5.7/routing#form-method-spoofing 以获得更多见解。
当您在浏览器地址栏中写下您的请求时,它应该是 GET 或 POST。这就是你犯错的原因。
MethodNotAllowedHttpException: It means that the route is correct, but method is mistaken. You used POST method - this method is automatic if you use browser. But you need DELETE method.
要使用 DELETE 方法,您应该使用 API 客户端。
PhpStorm 有 API 内置 API 客户端。 PHPStorm RESTApi client docs
但是!对我来说,最好的方法是使用 Postman! Postman sending requests docs
我这里有这些路由声明
//Skill
Route::get('skill','SkillController@index');
Route::get('skill/create','SkillController@create');
Route::post('skill/store','SkillController@store');
Route::get('skill/{id}','SkillController@show');
Route::get('skill/{id}/edit', 'SkillController@edit');
Route::post('skill/{id}/update','SkillController@update');
Route::delete('skill/{id}/destroy','SkillController@destroy');
有了这些路由,我可以在本地删除罚款。
当我尝试在生产环境中删除时,我一直收到
我确定,我有这条线
Route::delete('skill/{id}/destroy','SkillController@destroy');
- Local 和 Prod 具有相同的代码库。
- 本地 = Mac OS X
- 产品 = Ubuntu 服务器
我错过了什么?
由于您的问题仅出现在 linux 服务器的生产环境中,我认为这可能是 .htaccess 问题。
通常 Web 服务器将被配置为阻止除 GET 和 POST 之外的任何内容,因为 99% 的时间它们都是需要的,并且过去存在问题,应用程序假设请求是一个这两个。
您可以尝试使用
的 .htaccess<Limit GET POST PUT DELETE>
Allow from all
</Limit>
(我不是 apache 专家,这可能不完全正确)
路由是从表单触发的...是吗?你的表单方法应该是 POST
,而不是 DELETE
然后你应该添加一个隐藏的输入,使它作为 DELETE
路由,从而帮助你维护 Route::delete()
。
您的表单应如下所示:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="DELETE">
你的路线:
Route::delete('skill/{id}/destroy','SkillController@destroy');
阅读 https://laravel.com/docs/5.7/routing#form-method-spoofing 以获得更多见解。
当您在浏览器地址栏中写下您的请求时,它应该是 GET 或 POST。这就是你犯错的原因。
MethodNotAllowedHttpException: It means that the route is correct, but method is mistaken. You used POST method - this method is automatic if you use browser. But you need DELETE method.
要使用 DELETE 方法,您应该使用 API 客户端。
PhpStorm 有 API 内置 API 客户端。 PHPStorm RESTApi client docs
但是!对我来说,最好的方法是使用 Postman! Postman sending requests docs