Modify input before validation on Laravel 5.1

后端 未结 5 1829
故里飘歌
故里飘歌 2021-01-07 22:17

I\'m trying to modify an user submitted input before validation success. I\'ve followed this easy instructions, but when I test it on Laravel 5.1, It\'s not working.

5条回答
  •  不知归路
    2021-01-07 22:40

    This is a tricky one. I only figured out one way to achieve what you want.

    The main point is, that it has no effect for the Validator if you change the Request Values in the rules() function.

    You could do a workaround by adding a function to your UserCreateRequest:

    protected function getValidatorInstance() {
        $this->sanitize();
        return parent::getValidatorInstance();
    }
    

    This overrides the parent's getValidatorInstance();

    The parent's getValidatorInstance() method includes

        return $factory->make(
            $this->all(), $this->container->call([$this, 'rules']), $this->messages(), $this->attributes());
    

    Which is reached before your code in the rules() function, so the old values (not affected by the changes in rules()) of $this->all() are used.

    If you override that function in your own RequestClass you can manipulate the Request values before calling the actual parent's method.

    UPDATE (L5.5)

    If you are using the Controllers validate function you could do something like that:

        $requestData = $request->all();
    
        // modify somehow
        $requestData['firstname'] = trim($requestData['firstname']);
    
        $request->replace($requestData);
    
        $values = $this->validate($request, $rules);
    

提交回复
热议问题