我想获取验证规则中传递的参数。
对于我创建的某些验证规则,我可以从验证规则中获取参数,但是对于很少的规则,它没有获取参数。
在模型中,我使用以下代码:
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]);
答案 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被提交的地方工作。