【问题标题】:Laravel 5.4 "MethodNotAllowedHttpException" (Basic Task List)Laravel 5.4 “MethodNotAllowedHttpException”(基本任务列表)
【发布时间】:2017-08-03 06:27:27
【问题描述】:

我试图按照 Laravel 上的 this 教程进行操作,尽管那里的大部分代码和目录都已过时,但我还是设法使“添加任务”和表单在出现一些错误后显示出来。

现在的问题,删除按钮。 当我点击它时,它显示一个“MethodNotAllowedHttpException”。 我更改了源代码以匹配最新版本的 Laravel。

我的表格(当前版本):

<form action="{{ url('/task/'.$task->id) }}" method="POST">
   {{ method_field('DELETE') }}
   {{ csrf_field() }}
   <button type="submit" class="btn btn-danger">
     <i class="fa fa-btn fa-trash"></i>Delete
   </button>
</form>

我的路线:

Route::delete('/task/{id}', function ($id) {
    Task::findOrFail($id)->delete();
    return redirect('/');
});

我已经尝试了 4 个小时来解决这个问题,改变了我的路线和形式的方法;但无济于事。 这是我在这个网站上的第一个问题,如果这个问题有问题,请见谅。

谢谢~

编辑: 为了进一步帮助工作,这里是完整的错误日志 Error log, in Google Chrome

【问题讨论】:

  • 你应该使用method="post",然后像你已经做的那样使用帮助器“方法字段”
  • @ClaudioLudovicoPanetta 感谢您的快速响应,但是从“删除”更改为“发布”使删除按钮的行为类似于教程中的“添加任务”按钮;因为它返回一个验证错误(“名称字段是必需的”),而不是实际从数据库中删除“任务”。
  • 当你已经通过_method的隐藏字段时,你不需要{{method_field('delete')}}
  • @StephenHendricks 感谢您的评论,我排除了“method_field”,也排除了“_method”可互换,选择一个或另一个;但仍未修复。
  • 我们不在这里进行 [已解决] 编辑,您会添加一个自我回答吗?谢谢!

标签: php forms laravel routing


【解决方案1】:

改变

<form action="{{ url('task/'.$task->id) }}" method="DELETE">

<form action="{{ url('task/'.$task->id) }}" method="POST">

因为表单方法 DELETE 不存在,Laravel 只是用隐藏的输入“方法”“覆盖”了这个方法(你可以使用“{{ method_field('DELETE') }}”来放置这个输入)。

【讨论】:

  • 感谢您的回答,我尝试将表单的方法从“DELETE”更改为“POST”,并返回相同的“MethodNotAllowedHttpException”错误;当我点击“删除按钮”时
  • @Kevinfu 你能检查一下表单操作 url 是否正确吗?辅助函数 url() 是否创建了正确的 url?
  • 抱歉,我对 Laravel 和 Web 开发很陌生;我相信我输入的 URL 是正确的(我按照教程进行操作)。
  • 不完全是,教程中的 url 没有这个函数,并且以“/”开头的常用斜杠。如果那不是问题。因为其他都可以。
  • 非常感谢,在阅读了您的评论后,虽然它可能是 URL(因为使用的方法都可以),但我去了数据库并检查了表格结果字段“id”不存在;相反,在我的数据库表中更改列名后,它是“ID”;有效!谢了哥们! :D
【解决方案2】:

回答: 原来问题在于数据库表本身,让我解释一下: 我指的是在代码中称为“任务”的“任务”表(没问题) 但是,我在我的代码中将表中名为“ID”的列称为“id”,从而产生错误(新手错误)。

感谢@Autista_z 的指点,以及下方其他人的指导!

【讨论】:

    【解决方案3】:

    表单支持方法 Delete 或 Put ... 它只支持 get 和 post 方法,如果你想在 laravel 中实现 delete 这篇文章会帮助你 link

    【讨论】:

    • 我尝试了在表单中欺骗“删除”的方法,但遗憾的是仍然返回相同的错误...
    • 原来是 URL,以及我的数据库表是如何设置的。无论如何感谢您的帮助,从阅读您的链接中学到了很多东西!
    猜你喜欢
    • 2017-12-21
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2018-04-13
    • 1970-01-01
    • 2018-05-28
    • 2017-11-23
    相关资源
    最近更新 更多