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' => 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] 不存在。”