【发布时间】:2016-02-08 03:48:07
【问题描述】:
我正在构建一个花名册系统作为一个业余项目,在其中一个页面上,您可以更改某人的正常工作时间。
在页面上,我为一周中的每一天提供了一个复选框,然后您可以浏览并选择此人工作的适当日期。
他们需要至少工作一天,因此在提交时至少需要选中一个复选框。
为了测试这一点,我使用了 Laravel 验证器的 required_without_all 规则。
它工作得很好,但是如果没有选中任何框,它会将您重定向回来并吐出相同的错误消息 7 次(因为一周中的每一天都有 7 个复选框)。
我正在使用自定义错误消息,所以这就是错误消息相同的原因,但即使我不这样做,我也不希望一遍又一遍地重复类似的错误消息。
这是我的验证器的样子:
$validator = Validator::make($request->all(), [
'mondayCheckbox' => 'required_without_all:tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'tuesdayCheckbox' => 'required_without_all:mondayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'wednesdayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'thursdayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'fridayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,saturdayCheckbox,sundayCheckbox',
'saturdayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,sundayCheckbox',
'sundayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox',
'effective_from' => 'date',
], [
'mondayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'tuesdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'wednesdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'thursdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'fridayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'saturdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'sundayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'effective_from.date' => 'You have provided an invalid date for when their hours are effective from!',
]);
if ($validator->fails())
{
return Redirect::back()
->withErrors($validator)
->withInput();
}
因此,如果提交时未选中任何框,则会显示错误Surely they are working at least one day! 7 次。
我在页面上显示这样的错误:
@if (count($errors) > 0)
<div class="alert alert-danger">
<p><b>There were some problems:</b></p>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
有没有办法让它只显示一次?
【问题讨论】:
-
小技巧怎么样?使用 jQuery 或 Javascript,如果选中任何复选框,您可以设置隐藏输入的值,否则该值为无。所以现在在你的验证器中,你可以检查隐藏的输入字段,然后根据它做出响应。这将只显示一条消息。
-
来自 required_without_all 的文档:“只有在所有其他指定字段都不存在时,才必须存在正在验证的字段”。所以从技术上讲,这可能不是最理想的验证器吗?您是否对使用自定义验证器功能感到满意,我们可以尝试使用一个。这将比这里更容易挑战。
-
@JilsonThomas 我愿意接受一个小技巧,我的 javascript/jQuery 知识不是很好 - 你能告诉我一个如何做到这一点的例子吗? @ihatehandles
required_without_all似乎非常适合,例如,当其他指定字段都不存在时,需要存在其中一个字段。不过,我很乐意尝试创建一个自定义的 - 你会如何解决这个问题? -
@James:这样的事情:jsfiddle.net/wrs89cks
标签: php validation laravel laravel-5.1