【问题标题】:MethodNotAllowedHttpException in RouteCollection.php line 200:RouteCollection.php 第 200 行中的 MethodNotAllowedHttpException:
【发布时间】:2019-02-16 15:16:39
【问题描述】:

我这里有这些路线声明

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

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

我错过了什么?

【问题讨论】:

  • 您实际上是在发送 DELETE http 请求吗?你是怎么得到这个截图的?
  • 检查您的访问日志以查看实际访问服务器的请求类型。
  • 我将检查我的表单作为 HTML 代码。好的提示:D!

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


【解决方案1】:

由于您的问题仅出在生产环境上,即 linux 服务器,我认为这可能是 .htaccess 问题。

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

您可以尝试使用 .htaccess

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

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

【讨论】:

  • 好的,让我试试。
  • 是的。如果问题仍然存在,请告诉我。
【解决方案2】:

路由是从表单触发的...是吗?你的表单方法应该是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】:

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

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

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

但是!对我来说最好的方法是使用PostmanPostman sending requests docs

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 2016-11-21
    • 2017-10-23
    • 2017-01-26
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多