Laravel withValidator()没有按预期工作

时间:2018-03-19 12:03:33

标签: php laravel

我有这个包含规则的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");
}

2 个答案:

答案 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!');
            }
        });
    }