Przeglądaj źródła

Bind request in route (fixes #112)

shalvah 4 lat temu
rodzic
commit
de67b760da

+ 4 - 3
src/Extracting/Strategies/BodyParameters/GetFromFormRequest.php

@@ -60,9 +60,10 @@ class GetFromFormRequest extends Strategy
                 || (class_exists(DingoFormRequest::class) && $parameterClass->isSubclassOf(DingoFormRequest::class))) {
                 /** @var LaravelFormRequest|DingoFormRequest $formRequest */
                 $formRequest = new $parameterClassName;
-                // Set the route properly so it works for people who have code that checks for the route.
-                $formRequest->setRouteResolver(function () use ($route) {
-                    return $route;
+                // Set the route properly so it works for users who have code that checks for the route.
+                $formRequest->setRouteResolver(function () use ($formRequest, $route) {
+                    // Also need to bind the request to the route in case their code tries to inspect current request
+                    return $route->bind($formRequest);
                 });
                 $bodyParametersFromFormRequest = $this->getBodyParametersFromValidationRules(
                     $this->getRouteValidationRules($formRequest),

+ 11 - 4
src/Extracting/Strategies/Responses/UseApiResourceTags.php

@@ -67,6 +67,7 @@ class UseApiResourceTags extends Strategy
      * @param Tag[] $tags
      *
      * @param \Illuminate\Routing\Route $route
+     *
      * @return array|null
      * @throws \Exception
      */
@@ -118,10 +119,16 @@ class UseApiResourceTags extends Strategy
         }
 
 
+        /** @var Request $request */
+        $request = app(Request::class);
         /** @var Response $response */
-        $response = $resource->toResponse(app(Request::class)->setRouteResolver(function () use ($route) {
-            return $route;
-        }));
+        $response = $resource->toResponse(
+            // Set the route properly so it works for users who have code that checks for the route.
+            $request->setRouteResolver(function () use ($request, $route) {
+                // Also need to bind the request to the route in case their code tries to inspect current request
+                return $route->bind($request);
+            })
+        );
 
         return [
             [
@@ -189,7 +196,7 @@ class UseApiResourceTags extends Strategy
 
             $factory = Utils::getModelFactory($type, $factoryStates);
             try {
-                $model =  $factory->create();
+                $model = $factory->create();
                 $model->load($relations);
 
                 return $model;