Laravel 5 多个表单验证规则
Laravel 5 Multiple form validation rules
所以我在一页上有三个表格。一种是更改用户头像,一种是更新个人信息,最后一种是设置新密码。
我的问题是密码和密码确认字段出现验证错误,即使我正在尝试更新一些信息(第二种形式)。
我创建了两个请求:
用户编辑请求:
class UserEditRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'firstname' => 'required',
'lastname' => 'required'
];
}
}
用户更新密码请求:
class UserUpdatePasswordRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'password' => 'required|confirmed|min:6',
'password_confirmation' => 'required|min:6',
];
}
}
在 UserController 中 updatePassword:
public function updatePassword(UserUpdatePasswordRequest $request, $id)
{
$user = User::findOrFail($id);
$user->password = bcrypt($request->get('password'));
$user->save();
return redirect()->route('user.edit',$id)->with('success','Password changed.');
}
postEdit 我处理个人信息和头像更改的地方:
public function postEdit(UserEditRequest $request, $id)
{
dd($request->all());
$user = User::findOrFail($id);
if($request->get('avatar'))
{
$destinationPath = public_path() . '/avatars/' . $user->id . '/';
$fileName = $user->id . '.' . $request->file('avatar')->getClientOriginalExtension();
$request->file('avatar')->move($destinationPath, $fileName);
$user->avatar = 'avatars/' . $user->id . '/' . $fileName;
$user->save();
return redirect()->route('user.edit',$id)->with('success','User avatar modified.');
}
$user->fill($request->input())->save();
return redirect()->route('user.edit',$id)->with('success','User details modified.');
}
快速查询我的路线:
Route::group(['prefix' => 'user', 'as' => 'user.'], function () {
Route::get('profile/{userid}', ['as' => 'edit', 'uses' => 'UserController@getEdit']);
Route::post('profile/{userid}', ['as' => 'edit', 'uses' => 'UserController@postEdit']);
Route::post('profile/{userid}', ['as' => 'updatepassword', 'uses' => 'UserController@updatePassword']);
});
});
尝试区分 postEdit 和 updatePassword 控制器操作的路由
Route::post('profile/{userid}', ['as'=>'edit', 'uses'=>'UserController@postEdit']);
Route::post('profile/password/{userid}', ['as'=>updatepassword', 'uses'=>'UserController@updatePassword']);
对两个不同的控制器操作使用相同的路线是行不通的。我的意思是当表单 action='/profile/id' method='post' 时,您如何期望路由器确定调用哪个控制器操作?因此,您需要区分路线。
希望你明白了。
所以我在一页上有三个表格。一种是更改用户头像,一种是更新个人信息,最后一种是设置新密码。 我的问题是密码和密码确认字段出现验证错误,即使我正在尝试更新一些信息(第二种形式)。
我创建了两个请求:
用户编辑请求:
class UserEditRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'firstname' => 'required',
'lastname' => 'required'
];
}
}
用户更新密码请求:
class UserUpdatePasswordRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'password' => 'required|confirmed|min:6',
'password_confirmation' => 'required|min:6',
];
}
}
在 UserController 中 updatePassword:
public function updatePassword(UserUpdatePasswordRequest $request, $id)
{
$user = User::findOrFail($id);
$user->password = bcrypt($request->get('password'));
$user->save();
return redirect()->route('user.edit',$id)->with('success','Password changed.');
}
postEdit 我处理个人信息和头像更改的地方:
public function postEdit(UserEditRequest $request, $id)
{
dd($request->all());
$user = User::findOrFail($id);
if($request->get('avatar'))
{
$destinationPath = public_path() . '/avatars/' . $user->id . '/';
$fileName = $user->id . '.' . $request->file('avatar')->getClientOriginalExtension();
$request->file('avatar')->move($destinationPath, $fileName);
$user->avatar = 'avatars/' . $user->id . '/' . $fileName;
$user->save();
return redirect()->route('user.edit',$id)->with('success','User avatar modified.');
}
$user->fill($request->input())->save();
return redirect()->route('user.edit',$id)->with('success','User details modified.');
}
快速查询我的路线:
Route::group(['prefix' => 'user', 'as' => 'user.'], function () {
Route::get('profile/{userid}', ['as' => 'edit', 'uses' => 'UserController@getEdit']);
Route::post('profile/{userid}', ['as' => 'edit', 'uses' => 'UserController@postEdit']);
Route::post('profile/{userid}', ['as' => 'updatepassword', 'uses' => 'UserController@updatePassword']);
});
});
尝试区分 postEdit 和 updatePassword 控制器操作的路由
Route::post('profile/{userid}', ['as'=>'edit', 'uses'=>'UserController@postEdit']);
Route::post('profile/password/{userid}', ['as'=>updatepassword', 'uses'=>'UserController@updatePassword']);
对两个不同的控制器操作使用相同的路线是行不通的。我的意思是当表单 action='/profile/id' method='post' 时,您如何期望路由器确定调用哪个控制器操作?因此,您需要区分路线。 希望你明白了。