使用laravel和MySQL。我有用户更新表单与名称
,电子邮件
,密码
和符合密码
与以下控制器验证,
$this->validate($request, [
'name' =>'required',
'email' => 'required|email',
'password' => 'sometimes|min:6|confirmed'
]);
在我的表单中,普通用户不会更新所有输入字段。例如,一些用户只需要更新电子邮件。但是在上面的验证中,当我们只更新名称或电子邮件验证显示消息时,密码必须至少为6个字符代码>那么如何只更新姓名或电子邮件而不更新密码?
请尝试以下代码:
$this->validate($request, [
'name' =>'required',
'email' => 'required|email',
]);
$name = $request->name ;
$email = $request->email;
$q = User::where('id','=',auth()->user()->id);
$q->update(['name'=>$name,'email'=>$email]);
if(isset($request->password)){
$this->validate($request,[
'password' => 'required|string|min:6|confirmed',
]);
$password = $request->password);
$q->update(['password'=>$password );
}
您也可以通过将更改的密码放在单独的表单中来完成。
如果条件允许,请使用。当用户提交表单时,请检查哪些字段为空,哪些字段不为空。如果字段为空,则用户不想更新该信息,并且不需要对该字段运行验证。我不是laravel方面的专家,所以我不能发布任何演示代码。但我在其他框架中使用了这种方法。
试试这个:
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
]);
$validator->sometimes('password', 'min:6|confirmed', function ($input) {
return $input->password;
});
if(!$validator->fails()){
...
}
我不确定是否返回$input-
如果密码为空,则不要应用该规则。