Laravel 5验证规则required_with:password_confirmation

时间:2016-01-23 14:21:32

标签: php validation laravel-5.2

编辑表单中的验证规则存在问题。我的表单字段为nameemailpasswordpassword_confirmation。我的UpdateUserRequest类返回此规则:

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']) !!}
&#13;
&#13;
&#13;

密码验证规则required_with:password_confirmation应该允许用户留下空字段passwordpassword_confirmation,如果他不想更改它,但这不起作用。当我将该字段留空时,空值被散列并存储在数据库中。所有其他验证工作正常,但不是在用户在passwordpassword_confirmation中留下空值时。为什么这不起作用?我做错了什么?

1 个答案:

答案 0 :(得分:2)

您将需要更新数据库单独而不使用填充等,因为它始终将密码值设置为空,然后添加它,所以请尝试:

   $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是否也需要更新等。

基本上你需要验证是否需要输入,你的方法会获取所有请求的值,并且无论它们是空的还是注释都会更新。