Laravel 5 验证规则 required_with:password_confirmation
Laravel 5 validation rule required_with:password_confirmation
我对编辑表单中的验证规则有疑问。我的表单字段是 name
、email
、password
和 password_confirmation
。我的UpdateUserRequest
classreturn这条规则:
return [
'name' => ['required', 'max:50', 'min:3'],
'email' => ['required', 'email', 'unique:users,email,' .$this->route('users')],
'password' => ['required_with:password_confirmation', 'confirmed']
];
UsersController
中的更新方法是:
public function update(Requests\UpdateUserRequest $request, $id)
{
$user = $this->users->findOrFail($id);
$user->fill($request->only('name', 'email', 'password'))->save();
return redirect(route('backend.users.edit', $user->id))->with('status', 'User has been updated.');
}
这是一个表格:
{!! Form::model($user, [
'method' => $user->exists ? 'put' : 'post',
'route' => $user->exists ? ['backend.users.update', $user->id] : ['backend.users.store']
]) !!}
<div class="form-group">
{!! Form::label('name') !!}
{!! Form::text('name', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('email') !!}
{!! Form::email('email', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password') !!}
{!! Form::password('password', ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password_confirmation') !!}
{!! Form::password('password_confirmation', ['class' => 'form-control']) !!}
</div>
{!! Form::submit($user->exists ? 'Save User' : 'Create New User', ['class' => 'btn btn-primary btn-sm']) !!}
密码验证规则required_with:password_confirmation
应该允许用户在password
和password_confirmation
字段中留空(如果他不想更改的话),但这是行不通的。当我将该字段留空时,空值将被散列并存储在数据库中。所有其他验证都可以正常工作,但当用户在 password
和 password_confirmation
中留下空值时就不行了。为什么这不起作用?我做错了什么?
您将需要单独更新数据库而不使用填充等,因为它总是会得到密码值是否为空然后添加它,所以请尝试:
$user = $this->users->findOrFail($id);
$user->name = $request->get('name');
$user->email = $request->get('emil');
if(!empty($request->get('password')) {
$user->password = $request->get('password');
}
$user->save();
类似的东西,所以您正在检查 PW 是否也需要更新等。
基本上你需要验证是否需要输入,你的方法会获取所有请求的值,无论它们是否为空或注释都会更新。
我对编辑表单中的验证规则有疑问。我的表单字段是 name
、email
、password
和 password_confirmation
。我的UpdateUserRequest
classreturn这条规则:
return [
'name' => ['required', 'max:50', 'min:3'],
'email' => ['required', 'email', 'unique:users,email,' .$this->route('users')],
'password' => ['required_with:password_confirmation', 'confirmed']
];
UsersController
中的更新方法是:
public function update(Requests\UpdateUserRequest $request, $id)
{
$user = $this->users->findOrFail($id);
$user->fill($request->only('name', 'email', 'password'))->save();
return redirect(route('backend.users.edit', $user->id))->with('status', 'User has been updated.');
}
这是一个表格:
{!! Form::model($user, [
'method' => $user->exists ? 'put' : 'post',
'route' => $user->exists ? ['backend.users.update', $user->id] : ['backend.users.store']
]) !!}
<div class="form-group">
{!! Form::label('name') !!}
{!! Form::text('name', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('email') !!}
{!! Form::email('email', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password') !!}
{!! Form::password('password', ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password_confirmation') !!}
{!! Form::password('password_confirmation', ['class' => 'form-control']) !!}
</div>
{!! Form::submit($user->exists ? 'Save User' : 'Create New User', ['class' => 'btn btn-primary btn-sm']) !!}
密码验证规则required_with:password_confirmation
应该允许用户在password
和password_confirmation
字段中留空(如果他不想更改的话),但这是行不通的。当我将该字段留空时,空值将被散列并存储在数据库中。所有其他验证都可以正常工作,但当用户在 password
和 password_confirmation
中留下空值时就不行了。为什么这不起作用?我做错了什么?
您将需要单独更新数据库而不使用填充等,因为它总是会得到密码值是否为空然后添加它,所以请尝试:
$user = $this->users->findOrFail($id);
$user->name = $request->get('name');
$user->email = $request->get('emil');
if(!empty($request->get('password')) {
$user->password = $request->get('password');
}
$user->save();
类似的东西,所以您正在检查 PW 是否也需要更新等。
基本上你需要验证是否需要输入,你的方法会获取所有请求的值,无论它们是否为空或注释都会更新。