From 32d789cbb2aa308a2f362630597933033f184434 Mon Sep 17 00:00:00 2001 From: paulhenri-l <25308170+paulhenri-l@users.noreply.github.com> Date: Sun, 22 Dec 2019 00:52:46 +0100 Subject: [PATCH] Add new validateWithBag macro to Request --- .../Providers/FoundationServiceProvider.php | 11 ++++++++++ .../Validation/RequestValidationTest.php | 20 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php b/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php index d005c3615bab..df563249ce74 100644 --- a/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php +++ b/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php @@ -5,6 +5,7 @@ use Illuminate\Http\Request; use Illuminate\Support\AggregateServiceProvider; use Illuminate\Support\Facades\URL; +use Illuminate\Validation\ValidationException; class FoundationServiceProvider extends AggregateServiceProvider { @@ -54,6 +55,16 @@ public function registerRequestValidation() Request::macro('validate', function (array $rules, ...$params) { return validator()->validate($this->all(), $rules, ...$params); }); + + Request::macro('validateWithBag', function (string $errorBag, array $rules, ...$params) { + try { + return $this->validate($rules, ...$params); + } catch (ValidationException $e) { + $e->errorBag = $errorBag; + + throw $e; + } + }); } /** diff --git a/tests/Integration/Validation/RequestValidationTest.php b/tests/Integration/Validation/RequestValidationTest.php index be5c672787e0..15688d04a34e 100644 --- a/tests/Integration/Validation/RequestValidationTest.php +++ b/tests/Integration/Validation/RequestValidationTest.php @@ -28,4 +28,24 @@ public function testValidateMacroWhenItFails() $request->validate(['name' => 'string']); } + + public function testValidateWithBagMacro() + { + $request = Request::create('/', 'GET', ['name' => 'Taylor']); + + $validated = $request->validateWithBag('some_bag', ['name' => 'string']); + + $this->assertSame(['name' => 'Taylor'], $validated); + } + + public function testValidateWithBagMacroWhenItFails() + { + $request = Request::create('/', 'GET', ['name' => null]); + + try { + $request->validateWithBag('some_bag', ['name' => 'string']); + } catch (ValidationException $validationException) { + $this->assertEquals('some_bag', $validationException->errorBag); + } + } }