如何在一条路线中使用 PUT 和 PATCH 请求创建另一个更新功能?

Posted

技术标签:

【中文标题】如何在一条路线中使用 PUT 和 PATCH 请求创建另一个更新功能?【英文标题】:How to create another update function with PUT and PATCH request in one route? 【发布时间】:2016-04-01 13:09:06 【问题描述】:

我目前正在使用 laravel 5.0 开发一个项目。假设我的 route.php 中有这样的路线:

Route::resource('user', 'UserController', ['except' => ['index', 'create', 'store', 'destroy']]);
Route::get('user/user/posts', 'UserController@indexUserPosts');
Route::get('user/user/changepassword', 'UserController@changePassword');
Route::put('user/user/changepassword', 'UserController@updatePassword');
Route::patch('user/user/changepassword', 'UserController@updatePassword');

如果我访问http:// localhost:8000/user/username,它将触发显示方法,如果我访问http://localhost:8000/user/username/edit,它将触发编辑方法,该方法将向http:// localhost:8000/user/user 发出PUTPATCH 请求。但是在这个阶段,用户只能编辑他们的个人信息,对于密码我想创建一个新的editPassword,它也给出了PUTPATCH的请求。而且我不确定我上面的路线是否正确。

那么,问题是如何按照laravel的约定,在route.php文件中手动写入路由呢?

我应该再次向http: //localhost:8000/user/user 发送PUTPATCH 请求(我认为这将与来自编辑功能的PUTPATCH 请求一起崩溃)还是我应该发送PUT &PATCH 请求 http://localhost:8000/user/user/changepassword ?

提前致谢。 :)

【问题讨论】:

【参考方案1】:

首先你不需要重复patch 函数。使用put 就足够了。第二件事是,每当您创建任何额外的 url 和用户资源时,您都需要将它们放在资源路由之前,因此您的路由文件应该如下所示:

Route::get('user/user/posts', 'UserController@indexUserPosts');
Route::get('user/user/changepassword', 'UserController@changePassword');
Route::put('user/user/changepassword', 'UserController@update');
Route::resource('user', 'UserController', ['except' => ['index', 'create', 'store', 'destroy']]);

所以现在,当用户进入编辑页面时,他们将拥有编辑密码页面的链接,当他们点击它时,他们将转到 GET user/user/changepassword,当他们填写表格并单击更新时,他们将转到 PUT user/user/changepassword'

【讨论】:

实际上我尝试在路由中只使用 put 函数,所以我的路由看起来像这样: Route::get('user/user/changepassword', 'UserController@changePassword' ); Route::put('user/user/changepassword', 'UserController@updatePassword'); Route::resource('user', 'UserController', ['except' => ['index', 'create', 'store', 'destroy']]);但是在我的更改密码表格中,我实际上使用了我从 laracasts 网站学到的 PATCH 请求。而且它不起作用,当我尝试将 PATCH 更改为 PUT 时它确实起作用了,所以我应该包括这两个吗?

以上是关于如何在一条路线中使用 PUT 和 PATCH 请求创建另一个更新功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Yandex Tank 中发出 PUT/PATCH/DELETE 请求?

PATCH 和 PUT 请求的主要区别是啥?

SpringBoot接口同时支持PATCH和PUT请求

post、get、put、patch、Delete的区别

使用邮递员的 PUT/PATCH 请求在 Laravel 中返​​回状态码 0

如何发送一个PUT / DELETE请求jQuery的