php Laravel验证前的表单请求

dtcbnfnu  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(119)

我正在寻找一种方法来验证一些逻辑之前的formRequest验证,但我找不到任何东西。它是否在withValidator方法或构造函数中有类似于after()的钩子?
MyController:

class MyController extends Controller {
     public function myMethod(MyFormRequest $request) {
     //the request is validate before executing anything here
     }
    }

MyFormRequest:

class MyFormRequest extends FormRequest
    {
        protected $stopOnFirstFailure = true;
    
        public function rules(): array
        {
    
            return [
                'name' => 'integer',
                //etc
            ];
        }
    
        public function withValidator(Validator $validator): void
        {
          if ($this->request->model()->someValue < 100) {
           //throw validation error before the validation of the above rules
          } 
        }
    }

我不能把验证放在正常的rules集合中,因为我没有这个属性在请求数据中,特定的验证是在请求的模型上,它与会话相关(比如用户模型),我需要在其他任何事情之前首先检查,但我也不能把它放在authorization方法或中间件中,因为它不是一个验证检查。我总是可以将它添加到prepareForValidation中,但是这样我就在validatedData中有了一个属性,我在流中不需要它。..

qvtsj1bj

qvtsj1bj1#

**建议1:**由于您没有验证表单输入,请考虑将这部分验证转移到其他地方。中间件可能是一个很好的候选者。
**建议二:**如果你想把这个逻辑放在一个地方,试着重写下面的方法之一(不确定你需要哪一个):validatevalidateWithBagvalidateResolved。您将执行以下操作:

public function validate(array $rules, mixed $params)
{
    if ($this->request->model()->someValue < 100) {
       //throw validation error before the validation of the above rules
    } 

    parent::validate($rules, $params);
}

这种方法的一个潜在缺点是,您的自定义验证将在authorizeprepareForValidation之前进行。

相关问题