RouteCollection.php第200行中的MethodNotAllowedHttpException:

时间:2018-09-12 04:14:49

标签: php laravel laravel-5 routes laravel-5.1

我在这里有这些路线声明

//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');

有了这些路线,我就可以删除本地路线了。

当我尝试删除生产版本时,我不断得到

enter image description here

我肯定知道,我有这行

  

Route :: delete('skill / {id} / destroy','SkillController @ destroy');

  • Local和Prod具有相同的代码库。
  • 本地= Mac OS X
  • 产品= Ubuntu服务器

我错过了什么?

3 个答案:

答案 0 :(得分:4)

该路线是从表单触发的...是吗?您的表单方法应该是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了解更多信息。

答案 1 :(得分:3)

由于您的问题仅在生产中,这是Linux服务器,我认为可能是.htaccess问题。

通常,Web服务器将被配置为阻止除GET和POST之外的任何内容,因为99%的时间都是它们所需要的,并且过去应用程序存在问题,假设请求是这两个请求之一。 >

您可以尝试使用.htaccess

<Limit GET POST PUT DELETE>
 Allow from all
</Limit>

(我不是Apache的专家,可能并不完全正确)

答案 2 :(得分:1)

当您在浏览器地址栏中写下请求时,请求应该是GET或POST。这就是为什么你犯了错误。

  

MethodNotAllowedHttpException:这意味着路由正确,但是方法错误。您使用了POST方法-如果使用浏览器,则此方法是自动的。但是,您需要DELETE方法。

为了使用DELETE方法,您应该使用API​​客户端。 PhpStorm具有API内置API客户端。 PHPStorm RESTApi client docs enter image description here

但是!对我而言,最好的方法是使用 Postman Postman sending requests docs