Laravel自定义验证 - 获取参数

时间:2015-05-18 06:42:46

标签: php laravel validation

我想获取验证规则中传递的参数。

对于我创建的某些验证规则,我可以从验证规则中获取参数,但是对于很少的规则,它没有获取参数。

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

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]);

2 个答案:

答案 0 :(得分:18)

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

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

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

答案 1 :(得分:0)

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

  

自定义验证器Closure接收三个参数:名称   验证$属性,属性的$值和数组   传递给规则的$参数。

为什么Input::get( $parameters );呢?你应该检查$ parameters内​​容。

编辑。 好的,我想出你想做什么。如果未提交您尝试获取的值,则不会从输入中读取任何内容。看看

dd(Input::all());

然后你会发现

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

在Sponsor_id被提交的地方工作。