我在AppSeriveProvider.php
中创建了一个自定义验证器,代码为: -
Validator::extend('less_than', function($attribute, $value, $parameters, $validator) {
$max_field = $parameters[0];
$data = $validator->getData();
$max_value = 100;
return $value < $max_value;
});
Validator::replacer('less_than', function($message, $attribute, $rule, $parameters) {
return str_replace(':field', $parameters[0], $message);
});
我的控制器有这段代码
$messages = [
'bid.required' => 'Please enter the amount',
'bid.less_than' => 'Insufficient balance',
];
$balance = 100;
$v = Validator::make($request->all(), [
'bid' => 'required|less_than:$balance',
],$messages);
if ($v->fails()) {
return redirect('newgame')
->withErrors($v)
->withInput();
}else {
echo "Success"
}
我必须将balance变量发送到验证器,并且在验证器函数中我必须将$ max_value(当前有100)设置为$ balance中的值。
在目录中搜索并查找代码后,我无法理解$parameters
变量的内容是什么,因为它的0索引在max_field中引用,$validator->getData()
如何工作?以及$max_value
如何获得其价值。
请有人解释我这一切或评论相关问题的链接。并帮助解决这个大问题。
答案 0 :(得分:3)
为了解决这个问题,我使用了laravel的函数dd()来查看每个变量的内容。然后将AppSeriveProvider.php
中的自定义验证程序更改为
Validator::extend('less_than', function($attribute, $value, $parameters, $validator) {
$balance = $parameters[0]; //$parameters array contain the $balance passed by validator::make()
$data = $validator->getData(); //$data contain the $request->all()
return $value < $balance; //$value contain the bid set by user
});
Validator::replacer('less_than', function($message, $attribute, $rule, $parameters) {
return str_replace(':field', $parameters[0], $message);
});
控制器的代码
$messages = [
'bid.required' => 'Please enter the amount',
'bid.less_than' => 'Insufficient balance',
];
$balance = $user->balance;
$v = Validator::make($request->all(), [
'bid' => "required|less_than:$balance", //this balance variable acts as the parameter array for extended validator class
],$messages);
if ($v->fails()) {
return redirect('newgame')
->withErrors($v)
->withInput();
}else {
echo "Success";
}
代码中的注释中提供了解释。