Laravel自定义验证-获取参数


Laravel custom validation - get parameters

我想获得在验证规则中传递的参数

对于我创建的某些验证规则,我能够从验证规则中获取参数,但对于少数规则,它无法获取参数。

在模型中我使用以下代码:

public static $rules_sponsor_event_check = array(
    'sponsor_id' => 'required',
    'event_id' => 'required|event_sponsor:sponsor_id'
);

在ValidatorServiceProvider我使用以下代码:

    Validator::extend('event_sponsor', function ($attribute, $value, $parameters) {
        $sponsor_id = Input::get($parameters[0]);
        $event_sponsor = EventSponsor::whereIdAndEventId($sponsor_id, $value)->count();
        if ($event_sponsor == 0) {
            return false;
        } else {
            return true;
        }
    });

但是在这里,我无法使用以下方法获得赞助商id:

$sponsor_id = Input::get($parameters[0]);

作为第4步,整个验证器传递给您用extends定义的闭包。您可以使用它来获取所有已验证的数据:

Validator::extend('event_sponsor', function ($attribute, $value, $parameters, $validator) {
    $sponsor_id = array_get($validator->getData(), $parameters[0], null);
    // ...
});

顺便说一下,我在这里使用array_get是为了避免任何错误,如果传递的输入名称不存在

http://laravel.com/docs/5.0/validation#custom-validation-rules

自定义验证器闭包接收三个参数正在验证的$属性、该属性的$值和一个数组传递给规则的$参数

为什么是Input::get( $parameters ); ?你应该检查$parameters的内容

编辑。好吧,我知道你想干什么了。如果您试图获得的值没有被提交,则不会从输入中读取任何内容。看一下

dd(Input::all());

你会发现

sponsor_id=Input::get($parameters[0]);