|
3 | 3 | namespace Dingo\Api\Provider; |
4 | 4 |
|
5 | 5 | use ReflectionClass; |
| 6 | +use Dingo\Api\Http\FormRequest; |
| 7 | +use Illuminate\Routing\Redirector; |
6 | 8 | use Dingo\Api\Http\Middleware\Auth; |
7 | 9 | use Illuminate\Contracts\Http\Kernel; |
8 | 10 | use Dingo\Api\Event\RequestWasMatched; |
9 | 11 | use Dingo\Api\Http\Middleware\Request; |
| 12 | +use Illuminate\Foundation\Application; |
10 | 13 | use Dingo\Api\Http\Middleware\RateLimit; |
11 | 14 | use Illuminate\Routing\ControllerDispatcher; |
12 | 15 | use Dingo\Api\Http\Middleware\PrepareController; |
| 16 | +use Illuminate\Http\Request as IlluminateRequest; |
13 | 17 | use Dingo\Api\Routing\Adapter\Laravel as LaravelAdapter; |
14 | 18 |
|
15 | 19 | class LaravelServiceProvider extends DingoServiceProvider |
@@ -39,6 +43,12 @@ public function boot() |
39 | 43 | $this->updateRouterBindings(); |
40 | 44 | }); |
41 | 45 |
|
| 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 | + |
42 | 52 | $this->addMiddlewareAlias('api.auth', Auth::class); |
43 | 53 | $this->addMiddlewareAlias('api.throttle', RateLimit::class); |
44 | 54 | $this->addMiddlewareAlias('api.controllers', PrepareController::class); |
@@ -154,4 +164,39 @@ protected function gatherAppMiddleware(Kernel $kernel) |
154 | 164 |
|
155 | 165 | return $property->getValue($kernel); |
156 | 166 | } |
| 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 | + } |
157 | 202 | } |
0 commit comments