我目前正在使用 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
& PATCH
向http:// 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
?
提前致谢。 :)
答案 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}}