Laravel 6.0 不支持 DELETE、PUT 方法

Posted

技术标签:

【中文标题】Laravel 6.0 不支持 DELETE、PUT 方法【英文标题】:Laravel 6.0 does not support DELETE, PUT methods 【发布时间】:2020-01-29 15:26:04 【问题描述】:

我有一个我在 Laravel 5.8 制作的包。当我使用 Laravel 6.0 将它安装到新项目中时,DELETE 和 PUT 方法返回错误。

此路由不支持 DELETE 方法。支持的方法:GET、HEAD、POST。

当我在 composer.json Laravel 5.8 中编写并重新安装 composer 时——它起作用了。所以版本麻烦。

另外,这显示了我所有的路线。

php artisan route:list

我使用如下资源路由:

Route::resource('langs', 'Sashaef\TranslateProvider\Controllers\LangsController');

表格

<form id="myForm" action=" route('langs.update', [ 'id' => 0 ]) "
      method="POST" enctype="multipart/form-data">
     csrf_field() 
    <input type="hidden" name="_method" value="PUT"/>

【问题讨论】:

发布php artisan route:list的输出 使用@csrf 代替csrf_field()@method('PUT')@method('DELETE') 代替隐藏的_method 字段有什么改变吗?此外,从Route::resource(...) 生成的路由结果应该是lang 参数,而不是id 参数。试试route('langs.update', ['lang' =&gt; 0]) 【参考方案1】:

我很确定这是由您调用路线的方式引起的。

Route::resource('langs', 'xController');

应该生成如下更新路由

Methods:PUT|PATCH
Uri:    langs/lang
Name:   langs.update

您可以通过运行php artisan r:l --name=langs.update 来验证这一点

你也说错了

# WRONG WAY
route('langs.update', ['id' => 0])   // yields: /langs?id=0
# RIGHT WAY
route('langs.update', ['lang' => 0]) // yields: /langs/0

您可以在修补程序会话中验证这一点

【讨论】:

谢谢,这很有帮助。我发现这实际上记录在“路由 URL 生成和额外参数”下的 upgrade guide 中。 The DELETE method is not supported 消息只是因为参数绑定更改而找不到匹配的正确路由而显示。

以上是关于Laravel 6.0 不支持 DELETE、PUT 方法的主要内容,如果未能解决你的问题,请参考以下文章

laravel向我显示此错误此路由不支持POST方法。支持的方法:GET,HEAD,PUT,DELETE

Laravel 8 - 此路由不支持 POST 方法。支持的方法:删除

将 Laravel 从 5.6 升级到 6.0 后,调用未定义的 str_random() 函数不起作用

laravel transaction : laravel 的事务是不支持eloquent的, 要用DB::的方式

Laravel 6.0 php artisan route:list 返回“目标类 [App\Http\Controllers\SessionsController] 不存在。”

在 laravel 6.0 中未定义命令“ui”