如何在一条路线中使用 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
发出PUT
和PATCH
请求。但是在这个阶段,用户只能编辑他们的个人信息,对于密码我想创建一个新的editPassword
,它也给出了PUT
和PATCH
的请求。而且我不确定我上面的路线是否正确。
那么,问题是如何按照laravel的约定,在route.php文件中手动写入路由呢?
我应该再次向http: //localhost:8000/user/user
发送PUT
和PATCH
请求(我认为这将与来自编辑功能的PUT
和PATCH
请求一起崩溃)还是我应该发送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 请求?