如何在一个路由中创建具有PUT和PATCH请求的另一个更新函数?

时间:2015-12-27 13:13:24

标签: rest laravel laravel-5 laravel-routing put

我目前正在使用 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},它将触发show方法,如果我访问http://localhost:8000/user/{username}/edit,它将触发编辑方法,该方法将提供PUT& PATCHhttp:// localhost:8000/user/{user}提出请求。但是在这个阶段,用户只能编辑他们的个人信息,我想创建一个新的editPassword密码,同时也提供PUT& PATCH请求。我不确定我是否正确地写了上面的路线。

所以,问题是如何根据laravel的惯例在route.php文件中手动编写路由?

我应该发送PUT& PATCH再次向http: //localhost:8000/user/{user}请求(我认为会因编辑功能的PUT& PATCH请求崩溃)或者我应该发送PUT& ; PATCH请求http://localhost:8000/user/{user}/changepassword

提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

首先,您不需要重复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,当他们填写表单并点击更新时,他们会转到{ {1}}