Skip to content

Commit 6ac6b08

Browse files
gazbenthilanga
authored andcommitted
Fix laravel form request validaton (dingo#1542)
* Fix FormRequests missing class error * Fix styleCI * Fix Style ci * Fix style ci * Add missing use statements * Fix dingo/laravel form requests Lumen/laravel does not have a Redirector crontract, so I can only hint the type in the docs. * Fix FormRequests missing class error * Fix styleCI * Fix Style ci * Fix style ci * Add missing use statements * Fix dingo/laravel form requests Lumen/laravel does not have a Redirector crontract, so I can only hint the type in the docs.
1 parent 1422535 commit 6ac6b08

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

src/Http/FormRequest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Illuminate\Http\Request;
66
use Illuminate\Http\JsonResponse;
7-
use Laravel\Lumen\Http\Redirector;
87
use Illuminate\Contracts\Container\Container;
98
use Illuminate\Contracts\Validation\Validator;
109
use Dingo\Api\Exception\ValidationHttpException;
@@ -254,11 +253,11 @@ public function attributes()
254253
/**
255254
* Set the Redirector instance.
256255
*
257-
* @param Redirector $redirector
256+
* @param \Laravel\Lumen\Http\Redirector|\Illuminate\Routing\Redirector $redirector
258257
*
259258
* @return $this
260259
*/
261-
public function setRedirector(Redirector $redirector)
260+
public function setRedirector($redirector)
262261
{
263262
$this->redirector = $redirector;
264263

src/Provider/LaravelServiceProvider.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
namespace Dingo\Api\Provider;
44

55
use ReflectionClass;
6+
use Dingo\Api\Http\FormRequest;
7+
use Illuminate\Routing\Redirector;
68
use Dingo\Api\Http\Middleware\Auth;
79
use Illuminate\Contracts\Http\Kernel;
810
use Dingo\Api\Event\RequestWasMatched;
911
use Dingo\Api\Http\Middleware\Request;
12+
use Illuminate\Foundation\Application;
1013
use Dingo\Api\Http\Middleware\RateLimit;
1114
use Illuminate\Routing\ControllerDispatcher;
1215
use Dingo\Api\Http\Middleware\PrepareController;
16+
use Illuminate\Http\Request as IlluminateRequest;
1317
use Dingo\Api\Routing\Adapter\Laravel as LaravelAdapter;
1418

1519
class LaravelServiceProvider extends DingoServiceProvider
@@ -39,6 +43,12 @@ public function boot()
3943
$this->updateRouterBindings();
4044
});
4145

46+
$this->app->resolving(FormRequest::class, function (FormRequest $request, Application $app) {
47+
$this->initializeRequest($request, $app['request']);
48+
49+
$request->setContainer($app)->setRedirector($app->make(Redirector::class));
50+
});
51+
4252
$this->addMiddlewareAlias('api.auth', Auth::class);
4353
$this->addMiddlewareAlias('api.throttle', RateLimit::class);
4454
$this->addMiddlewareAlias('api.controllers', PrepareController::class);
@@ -154,4 +164,39 @@ protected function gatherAppMiddleware(Kernel $kernel)
154164

155165
return $property->getValue($kernel);
156166
}
167+
168+
/**
169+
* Initialize the form request with data from the given request.
170+
*
171+
* @param FormRequest $form
172+
* @param IlluminateRequest $current
173+
*
174+
* @return void
175+
*/
176+
protected function initializeRequest(FormRequest $form, IlluminateRequest $current)
177+
{
178+
$files = $current->files->all();
179+
180+
$files = is_array($files) ? array_filter($files) : $files;
181+
182+
$form->initialize(
183+
$current->query->all(),
184+
$current->request->all(),
185+
$current->attributes->all(),
186+
$current->cookies->all(),
187+
$files,
188+
$current->server->all(),
189+
$current->getContent()
190+
);
191+
192+
$form->setJson($current->json());
193+
194+
if ($session = $current->getSession()) {
195+
$form->setLaravelSession($session);
196+
}
197+
198+
$form->setUserResolver($current->getUserResolver());
199+
200+
$form->setRouteResolver($current->getRouteResolver());
201+
}
157202
}

0 commit comments

Comments
 (0)