Laravel 5.7 验证规则

Laravel 5.7 Validation Rules

当我提交表单时,这就是我验证字段的方式...

<?php

$this->validate($request, [
    'name' => __('required|max:255|unique:templates,name,NULL,id,company_id,:company_id', [
        'company_id' => $request->input('companies')
    ]),
    'modules' => 'required|numeric',
    'companies' => 'required|numeric',
    'start_date' => 'required_with:limited_availability|date|before:end_date',
    'end_date' => 'required_with:limited_availability|date|after:start_date',
    'indesign_location' => __('required|file|mimetypes:application/zip|max::max_upload_size', [
        'max_upload_size' => config('file.max_size')
    ])
]);

我想达到的目标: 字段 start_dateend_date 只应在字段 limited_availability 存在时才需要(因此被验证)。

现在发生了什么: 我没有收到该字段是必填项的消息,但我在两个日期字段上都收到一条错误消息,指出指定的日期无效。

limited_availability 是一个复选框,start_dateend_date 都是日期输入字段。

我该如何解决这个问题?

您可以使用这些验证规则中的任何一个来实现。输入逗号,它会将其视为第二个参数。

'start_date' => 'required_if:limited_availability,'
'end_date' => 'required_if:limited_availability,' 

or

 'start_date' => 'required_without:limited_availability,'
 'end_date' => 'required_without:limited_availability,'

可能这是一个幼稚的解决方案。但我很确定这会奏效。

// First thing we separate the validation rule and save it in a variable
$rules = [
    'name'                 => __( 'required|max:255|unique:templates,name,NULL,id,company_id,:company_id', [
        'company_id' => $request->input( 'companies' )
    ] ),
    'modules'              => 'required|numeric',
    'companies'            => 'required|numeric',
    'indesign_location'    => __( 'required|file|mimetypes:application/zip|max::max_upload_size', [
        'max_upload_size' => config( 'file.max_size' )
    ] )
];

// the solution is here
if ($request->has('limited_availability')) {
    $rules['start_date'] = 'required|date|before:end_date';
    $rules['end_date']   = 'require|date|after:start_date';
}

$this->validate( $request, $rules);

希望对您有所帮助。