Laravel 5.4 “MethodNotAllowedHttpException”(基本任务列表)

Posted

技术标签:

【中文标题】Laravel 5.4 “MethodNotAllowedHttpException”(基本任务列表)【英文标题】:Laravel 5.4 "MethodNotAllowedHttpException" (Basic Task List) 【发布时间】: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”可互换,选择一个或另一个;但仍未修复。 我们不在这里进行 [已解决] 编辑,您会添加一个自我回答吗?谢谢! 【参考方案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,以及我的数据库表是如何设置的。无论如何感谢您的帮助,从阅读您的链接中学到了很多东西!

以上是关于Laravel 5.4 “MethodNotAllowedHttpException”(基本任务列表)的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.4 在邮件中嵌入图像

Laravel 5.4 有时验证规则不起作用

从 5.4 升级后的 Laravel 419 发布请求

如何将我的 laravel 5.0 项目直接升级到 5.4?

反射异常:Laravel 5.4

从 Laravel 5.3 升级到 Laravel 5.4 并且空字段转换为 NULL