【问题标题】:Laravel 5.7 Validation RulesLaravel 5.7 验证规则
【发布时间】:2018-10-31 08:10:41
【问题描述】:

当我提交表单时,我会这样做以验证我的字段...

<?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 都是日期输入字段。

我该如何解决这个问题?

【问题讨论】:

  • 你能转储limited_availability的提交值吗?其实不知道required_with验证是怎么工作的,但是如果limited_availability的值总是被提交,它总是会通过验证规则。
  • "现在发生的情况是我没有收到该字段是必填字段的消息,但我确实在两个日期字段中收到指定日期无效的错误消息。"如果存在日期字段,那么它不会中断要求.. 验证所以没有错误吗?如果您尝试不使用一个日期参数并且它是这样说的,那么它基本上不会看到 limited_availability 存在。你确定送他们?检查 $request 变量是否存在。
  • @DharmaSaputra 我 100% 确定帖子中不存在 limited_availability 字段。我已经检查过了。也就是说,当我不选中复选框时,当我选中它时,它会出现在请求中。
  • @mutas 当我没有选中复选框时,limited_availability 不会发送(请参阅我上面的评论)。我的目标是使该字段成为必填字段并仅在选中 limited_availability 时检查日期。
  • 我不知道了。但我会用 dd($request->all()); 来检查请求,返回 $request->all(); 或使用调试工具,当我选中复选框而不是。

标签: laravel laravel-5 laravel-validation laravel-5.7


【解决方案1】:

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

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

希望对你有帮助。

【讨论】:

  • 确实如此。但我有点希望在没有任何其他 if/else 语句的情况下可以在单个字符串中使用。看起来这是最好的解决方案。
【解决方案2】:

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

'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,'

【讨论】:

  • 谢谢,但 required_if 需要 2 个参数,所以如果我没记错的话应该是 required_if:limited_availability,1。当我这样尝试时,我仍然收到指定日期无效的消息。
猜你喜欢
  • 1970-01-01
  • 2016-12-17
  • 2020-06-25
  • 2020-06-09
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 2018-10-13
相关资源
最近更新 更多