我有自定义验证,我将其添加到表单请求中:
public function rules()
{
return [
...
"firstCheckbox" => "required_with_one_of:secondCheckbox,thirdCheckbox",
...
];
}
规则是,如果用户选择firstCheckbox
,则他需要从给定参数中选择至少一个复选框:secondCheckbox
或thirdCheckbox
。
为了实现这一点,我在代码后添加了AppServiceProvider.php
的启动功能:
Validator::extend('required_with_one_of', function($attribute, $value, $parameters, $validator)
{
$data = $validator->getData();
foreach ($parameters as $p) {
if ( array_get($data,$p) != null) {return true;}
}
return false;
});
Validator::replacer('required_with_one_of', function($message, $attribute, $rule, $parameters) {
return str_replace(':values', implode(' / ', $parameters), $message);
});
所有这一切都很好但如果我没有想到什么,请指出它,以便我可以解决它。
我真正的问题在于消息。我收到的消息是:
"您必须至少选择以下一个字段:secondCheckbox,thirdCheckbox"
但我想要的是得到消息:
"您必须至少选择以下一个字段:第二个复选框,第三个复选框"
到我的lang\en\validation.php
attributes[]
我添加了
'secondCheckbox' => 'Second Checkbox'
'thirdCheckbox' => 'Third Checkbox'
值,但这不起作用,因为我从不替换$parameters
中的Validator::replacer()
值。
我查看了Validator
类,并且有一个简单的函数来处理所有这些
$parameters = $this->getAttributeList($parameters);
但我无法从Validator::replacer()
拨打该电话。
是否有一种简单的方法可以从Validator::replacer()
调用此函数,或者我应该创建CustomValidator
类来扩展Validator
。
如果第二种方式是可行的,有人可以给我指示如何做到这一点。我从来没有在这个级别上真正使用PHP,所以尽管我已经大致知道该怎么做,但我并不确定如何做到这一点。