Skip to content

Commit

Permalink
[5.7] Backport #26486 - Fix validation triggering twice (#26731)
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigopedra authored and taylorotwell committed Dec 4, 2018
1 parent 5a4c637 commit f1cfd61
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 2 deletions.
26 changes: 24 additions & 2 deletions src/Illuminate/Foundation/Http/FormRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ class FormRequest extends Request implements ValidatesWhenResolved
*/
protected $errorBag = 'default';

/**
* The validator instance.
*
* @var \Illuminate\Contracts\Validation\Validator
*/
protected $validator;

/**
* Get the validator instance for the request.
*
Expand All @@ -77,7 +84,9 @@ protected function getValidatorInstance()
$this->withValidator($validator);
}

return $validator;
$this->setValidator($validator);

return $this->validator;
}

/**
Expand Down Expand Up @@ -172,7 +181,7 @@ protected function failedAuthorization()
*/
public function validated()
{
return $this->getValidatorInstance()->validated();
return $this->validator->validated();
}

/**
Expand All @@ -195,6 +204,19 @@ public function attributes()
return [];
}

/**
* Set the Validator instance.
*
* @param \Illuminate\Contracts\Validation\Validator $validator
* @return $this
*/
public function setValidator(Validator $validator)
{
$this->validator = $validator;

return $this;
}

/**
* Set the Redirector instance.
*
Expand Down
33 changes: 33 additions & 0 deletions tests/Foundation/FoundationFormRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Routing\UrlGenerator;
use Illuminate\Http\RedirectResponse;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Contracts\Translation\Translator;
use Illuminate\Validation\Factory as ValidationFactory;
use Illuminate\Contracts\Validation\Factory as ValidationFactoryContract;
Expand Down Expand Up @@ -67,6 +68,15 @@ public function test_validated_method_returns_the_validated_data_nested_array_ru
$this->assertEquals(['nested' => [['bar' => 'baz'], ['bar' => 'baz2']]], $request->validated());
}

public function test_validated_method_not_validate_twice()
{
$payload = ['name' => 'specified', 'with' => 'extras'];
$request = $this->createRequest($payload, FoundationTestFormRequestTwiceStub::class);
$request->validateResolved();
$request->validated();
$this->assertEquals(1, FoundationTestFormRequestTwiceStub::$count);
}

/**
* @expectedException \Illuminate\Validation\ValidationException
*/
Expand Down Expand Up @@ -246,13 +256,36 @@ public function authorize()
}
}

class FoundationTestFormRequestTwiceStub extends FormRequest
{
public static $count = 0;

public function rules()
{
return ['name' => 'required'];
}

public function withValidator(Validator $validator)
{
$validator->after(function ($validator) {
self::$count++;
});
}

public function authorize()
{
return true;
}
}

class FoundationTestFormRequestForbiddenStub extends FormRequest
{
public function authorize()
{
return false;
}
}

class FoundationTestFormRequestHooks extends FormRequest
{
public function rules()
Expand Down

0 comments on commit f1cfd61

Please sign in to comment.