Skip to content

Commit 51d2fb1

Browse files
authored
Merge pull request #236 from kotfire/master
Support custom validator method on laravel FormRequest
2 parents 5bdb40e + bc27ba4 commit 51d2fb1

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

src/Mpociot/ApiDoc/Generators/LaravelGenerator.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Illuminate\Support\Facades\Request;
1212
use League\Fractal\Resource\Collection;
1313
use Illuminate\Foundation\Http\FormRequest;
14+
use Illuminate\Contracts\Validation\Factory as ValidationFactory;
1415

1516
class LaravelGenerator extends AbstractGenerator
1617
{
@@ -278,7 +279,9 @@ protected function getRouteRules($route, $bindings)
278279
$parameterReflection->request->add($bindings);
279280

280281
if (method_exists($parameterReflection, 'validator')) {
281-
return app()->call([$parameterReflection, 'validator'])
282+
$factory = app()->make(ValidationFactory::class);
283+
284+
return app()->call([$parameterReflection, 'validator'], [$factory])
282285
->getRules();
283286
} else {
284287
return app()->call([$parameterReflection, 'rules']);

tests/ApiDocGeneratorTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,16 @@ public function testCanParseFormRequestRules()
337337
}
338338
}
339339

340+
public function testCustomFormRequestValidatorIsSupported()
341+
{
342+
RouteFacade::post('/post', TestController::class.'@customFormRequestValidator');
343+
$route = new Route(['POST'], '/post', ['uses' => TestController::class.'@customFormRequestValidator']);
344+
$parsed = $this->generator->processRoute($route);
345+
$parameters = $parsed['parameters'];
346+
347+
$this->assertNotEmpty($parameters);
348+
}
349+
340350
public function testCanParseResponseTag()
341351
{
342352
RouteFacade::post('/responseTag', TestController::class.'@responseTag');
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace Mpociot\ApiDoc\Tests\Fixtures;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class CustomValidatorRequest extends FormRequest
8+
{
9+
/**
10+
* Validate the input.
11+
*
12+
* @param \Illuminate\Validation\Factory $factory
13+
*
14+
* @return \Illuminate\Validation\Validator
15+
*/
16+
public function validator($factory)
17+
{
18+
return $factory->make(
19+
$this->validationData(), $this->container->call([$this, 'foo']),
20+
$this->messages(), $this->attributes()
21+
);
22+
}
23+
24+
public function foo()
25+
{
26+
return [
27+
'required' => 'required',
28+
];
29+
}
30+
}

tests/Fixtures/TestController.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public function parseFormRequestRules(TestRequest $request)
2727
return '';
2828
}
2929

30+
public function customFormRequestValidator(CustomValidatorRequest $request)
31+
{
32+
return '';
33+
}
34+
3035
public function addRouteBindingsToRequestClass(DynamicRequest $request)
3136
{
3237
return '';

0 commit comments

Comments
 (0)