RouteCollection.php第200行中的MethodNotAllowedHttpException:

问题描述 投票:2回答:3

我在这里有这些路线声明

//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

我肯定知道,我有这条线

路线::删除( '技能/ {ID} /销毁', 'SkillController @破坏');

  • Local和Prod具有相同的代码库。
  • Local = Mac OS X.
  • Prod = Ubuntu Server

我错过了什么?

php laravel laravel-5 routes laravel-5.1
3个回答
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以获得更多洞察力。


3
投票

因为你的问题是生产只有linux服务器,我认为它可能是.htaccess问题。

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

你可以试试.htaccess

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

(我不是apache的专家,这可能不完全正确)


1
投票

当您在浏览器地址栏中记下您的请求时,它应该是GET或POST。这就是你犯错误的原因。

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

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

但!对我来说,最好的方法是使用邮差! Postman sending requests docs

© www.soinside.com 2019 - 2024. All rights reserved.