我在这里有这些路线声明
//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');
我错过了什么?
答案 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
但是!对我而言,最好的方法是使用 Postman ! Postman sending requests docs