validator = $validator; } abstract protected function data($object): array; abstract protected function rules(): array; abstract protected function messages(): array; /** * @param DataTransferObject $object * @return bool * @throws RequestValidationException */ public function validate(DataTransferObject $object, ?string $type = 'POST') { $validator = $this->validator::make($this->data($object), $this->rules($type), $this->messages()); if($validator->fails()) { throw new RequestValidationException($validator->messages()->first()); } return true; } }