【问题标题】:How to validate an input field if value is not null in Laravel如果 Laravel 中的值不为空,如何验证输入字段
【发布时间】:2017-08-22 10:55:05
【问题描述】:

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

这是为创建用户添加的验证。它有效。

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

更新时不需要密码字段。但如果密码字段不为空,请验证 min:6 并确认规则。尝试使用sometimes.. 但无法正常工作..

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

【问题讨论】:

  • 如果您有 2 个单独的创建和更新函数,您可以从更新中删除密码验证规则

标签: php laravel laravel-5.4 laravel-validation


【解决方案1】:

尝试使用 nullable 作为规则

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

https://laravel.com/docs/5.8/validation#a-note-on-optional-fields

【讨论】:

    【解决方案2】:

    我会这样做:

    //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
    ]);
    

    说明:
    这样,只有在请求中定义(存在)时才会验证值
    如果您使用 nullable,验证器将接受 null 作为值(我认为这是不可接受的)
    如果您从更新中删除 password 验证,则此输入将根本不会被验证,并且 任何值 都将被接受(这也是不可接受的);

    【讨论】:

    • 回答前请仔细阅读问题。
    【解决方案3】:

    如果列可以为空

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

    @Rejinderi 的回答是正确的!

    如果列不可为空(这可能对其他人有帮助)

    '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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 2016-12-18
      • 2017-03-27
      • 1970-01-01
      • 2011-10-25
      • 2016-07-22
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多