Php 如果Laravel中的值不为null,如何验证输入字段

Php 如果Laravel中的值不为null,如何验证输入字段,php,laravel,laravel-5.4,laravel-validation,Php,Laravel,Laravel 5.4,Laravel Validation,我正在尝试使用laravel 5.4创建和更新用户 这是为创建用户添加的验证。它起作用了 $this->validate($request, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6|confirmed', ]); 更新时,不需要密码字段。但如果密码字段不为空,则验证

我正在尝试使用laravel 5.4创建和更新用户

这是为创建用户添加的验证。它起作用了

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);
更新时,不需要密码字段。但如果密码字段不为空,则验证min:6和confirmed规则。有时尝试使用
。。但是不起作用

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users,email,'.$id,
    'password' => 'sometimes|min:6|confirmed',
]);

尝试使用nullable作为规则

'password' => 'nullable|min:6|confirmed',

请参见

我会这样做:

//For new or create :
$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);

//For edit or update:
$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'min:6|confirmed',//just remove required from password rule
]);
说明:
这样,只有在请求中定义(存在)该值时才会验证该值
如果您使用null可,则验证器将接受null作为值(我认为这是不可接受的)
如果从更新中删除密码验证,则根本不会验证此输入,并且将接受任何值(这也是不可接受的)

以防列为空 @雷金德里的回答是正确的

如果列不可为空(这可能有助于其他) 结果
如果您有两个用于创建和更新的独立函数,则可以从更新中删除密码验证规则在回答之前仔细阅读问题。
'password' => 'nullable|min:6|confirmed',
'password' => 'sometimes|required|min:6|confirmed',
username = 'admin',
password = null // fail- required

username = 'admin',
password = 123 // fail- min:6

username = 'admin' // pass- validate only exist