将变量传递给验证器,Laravel

时间:2016-03-20 20:11:45

标签: php validation laravel

我在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如何获得其价值。

请有人解释我这一切或评论相关问题的链接。并帮助解决这个大问题。

1 个答案:

答案 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";
}

代码中的注释中提供了解释。