我目前正在尝试使用编辑字段构建用户注册系统。在编辑部分,我必须创建单独的视图来编辑/更新个人详细信息,电子邮件和密码。
我从一个空的资源控制器开始。它只有一种编辑方法。因此,我添加了其他编辑方法。每种方法可以有单独的路线。但是,我很难在每个部分中为每种更新方法设置一条单独的路由,因为该资源在docs中只有这样的一条路由:
PUT / PATCH / photos / {photo}更新photos.update
有什么解决方法吗?
控制器
class UserController extends Controller
{
public function __construct()
{
$this->middleware(['auth', 'verified']);
}
public function index()
{
return view('users.index');
}
public function edit_personal(User $user)
{
$user_profile = User::find($user->id);
return view('users.edit.personal', ['users' => $user_profile]);
}
public function update_personal(Request $request, User $user)
{
// How to write route for this method.
}
public function edit_email(User $user)
{
$user_profile = User::find($user->id);
return view('users.edit.email', ['users' => $user_profile]);
}
public function update_email(Request $request, User $user)
{
// How to write route for this method.
}
public function edit_password(User $user)
{
$user_profile = User::find($user->id);
return view('users.edit.password', ['users' => $user_profile]);
}
}
路线
Auth::routes(['verify' => true]);
Route::get('/', function () {
return view('welcome');
});
Route::get('/users/{user}/personal', 'UserController@edit_personal')->name('users.personal');
Route::get('/users/{user}/email', 'UserController@edit_email')->name('users.email');
Route::get('/users/{user}/password', 'UserController@edit_password')->name('users.password');
Route::resource('users', 'UserController');
基本上,我已经将用户控制器的编辑部分分为个人,电子邮件和密码两部分,它们具有不同的形式。我想为UserController中的每个部分编写更新功能。
答案 0 :(得分:1)
不知道您为什么要使用单独的表单来更新每个字段,而您却可以用一个表单来完成。但是,您可以使用put / patch或post方法进行更新。这是我使用帖子的例子。 路线:
Route::get('users/{user}/personal', 'UserController@edit_personal')->name('users.personal');
Route::post('users/{user}/personal', 'UserController@update_personal')->name('users.update-personal');
Route::get('users/{user}/email', 'UserController@edit_email')->name('users.email');
Route::post('users/{user}/email', 'UserController@update_email')->name('users.update-email');
Route::get('users/{user}/password', 'UserController@edit_password')->name('users.password');
Route::post('users/{user}/password', 'UserController@update_password')->name('users.update-password');
在使用路由模型绑定时,您可以直接获取对象。
public function edit_personal(User $user)
{
return view('users.edit.personal', ['users' => $user]);
}
public function update_personal(Request $request, User $user)
{
//validation goes here
$user->update([
'value' => $request->value,
...........
]);
}