我有这个包含规则的formrequest和一个withValidator作为第二层验证。
注意:我知道在规则中使它具有唯一性会妨碍对此示例的需求,但我需要在此处进行进一步的验证。
public function rules(Request $request) {
return [
"name" => "required|max:191",
"begin_date" => "required|after_or_equal:today|date_format:d-m-Y",
"end_date" => "required|after:begin_date|date_format:d-m-Y",
];
}
public function withValidator($factory) {
$result = User::where('name', $this->name)->get();
if (!$result->isEmpty()) {
$factory->errors()->add('User', 'Something wrong with this guy');
}
return $factory;
}
我很肯定它进入了if
因为我之前已经放了一个dd来检查它是否进入了内部。但是,它会在Controller上进行此方法,我不想这样做。
public function justATest(UserRequest $request) {
dd("HI");
}
答案 0 :(得分:0)
我是个白痴,并没有阅读完整的文档。
需要使用after函数指定,如下所示:
public function withValidator($factory) {
$result = User::where('name', $this->name)->get();
$factory->after(function ($factory) use ($result) {
if (!$result->isEmpty()) {
$factory->errors()->add('User', 'Something wrong with this guy');
}
});
return $factory;
}
答案 1 :(得分:0)
我也面临着这个问题。 我将withValidator更改为此:
public function withValidator($validator)
{
if (!$validator->fails()) {
$validator->after(function ($validator) {
if (Cache::has($this->mobile)) {
if (Cache::get($this->mobile) != $this->code) {
$validator->errors()->add('code', 'code is incorrect!');
} else {
$this->user = User::where('mobile', $this->mobile)->first();
}
} else {
$validator->errors()->add('code', 'code not found!');
}
});
}