فهرست منبع

Set HTTP method correctly for FormRequests (fixes #532, #585)

shalvah 2 سال پیش
والد
کامیت
8c51eec07b
2فایلهای تغییر یافته به همراه15 افزوده شده و 19 حذف شده
  1. 5 2
      src/Extracting/Strategies/GetFromFormRequestBase.php
  2. 10 17
      src/Extracting/Strategies/Responses/ResponseCalls.php

+ 5 - 2
src/Extracting/Strategies/GetFromFormRequestBase.php

@@ -2,6 +2,7 @@
 
 namespace Knuckles\Scribe\Extracting\Strategies;
 
+use Illuminate\Routing\Route;
 use Knuckles\Camel\Extraction\ExtractedEndpointData;
 use Dingo\Api\Http\FormRequest as DingoFormRequest;
 use Illuminate\Foundation\Http\FormRequest as LaravelFormRequest;
@@ -24,7 +25,7 @@ class GetFromFormRequestBase extends Strategy
         return $this->getParametersFromFormRequest($endpointData->method, $endpointData->route);
     }
 
-    public function getParametersFromFormRequest(ReflectionFunctionAbstract $method, $route = null): array
+    public function getParametersFromFormRequest(ReflectionFunctionAbstract $method, ?Route $route = null): array
     {
         if (!$formRequestReflectionClass = $this->getFormRequestReflectionClass($method)) {
             return [];
@@ -41,12 +42,14 @@ class GetFromFormRequestBase extends Strategy
         } else {
             $formRequest = new $className;
         }
-        /** @var LaravelFormRequest|DingoFormRequest $formRequest */
         // Set the route properly so it works for users who have code that checks for the route.
+        /** @var LaravelFormRequest|DingoFormRequest $formRequest */
         $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);
         });
+        $formRequest->server->set('REQUEST_METHOD', $route->methods()[0]);
+
         $parametersFromFormRequest = $this->getParametersFromValidationRules(
             $this->getRouteValidationRules($formRequest),
             $this->getCustomParameterData($formRequest)

+ 10 - 17
src/Extracting/Strategies/Responses/ResponseCalls.php

@@ -86,7 +86,7 @@ class ResponseCalls extends Strategy
             $bodyParameters, $queryParameters, $fileParameters, $headers
         );
 
-        $request = $this->runPreRequestHook($request, $endpointData);
+        $this->runPreRequestHook($request, $endpointData);
 
         try {
             $response = $this->makeApiCall($request, $endpointData->route);
@@ -154,22 +154,19 @@ class ResponseCalls extends Strategy
             "$rootUrl/$uri", $method, [], $cookies, $fileParameters,
             $this->transformHeadersToServerVars($headers), json_encode($bodyParams)
         );
-        // Doing it again to catch any ones we didn't transform properly.
-        $request = $this->addHeaders($request, $route, $headers);
-
-        $request = $this->addQueryParameters($request, $queryParams);
-        $request = $this->addBodyParameters($request, $bodyParams);
+        // Add headers again to catch any ones we didn't transform properly.
+        $this->addHeaders($request, $route, $headers);
+        $this->addQueryParameters($request, $queryParams);
+        $this->addBodyParameters($request, $bodyParams);
 
         return $request;
     }
 
-    protected function runPreRequestHook(Request $request, ExtractedEndpointData $endpointData): Request
+    protected function runPreRequestHook(Request $request, ExtractedEndpointData $endpointData): void
     {
         if (is_callable(Globals::$__beforeResponseCall)) {
             call_user_func_array(Globals::$__beforeResponseCall, [$request, $endpointData]);
         }
-
-        return $request;
     }
 
     private function setLaravelConfigs(array $config)
@@ -243,9 +240,9 @@ class ResponseCalls extends Strategy
         return array_diff($route->methods(), ['HEAD']);
     }
 
-    private function addHeaders(Request $request, Route $route, ?array $headers): Request
+    private function addHeaders(Request $request, Route $route, ?array $headers): void
     {
-        // set the proper domain
+        // Set the proper domain
         if ($route->getDomain()) {
             $request->headers->add([
                 'HOST' => $route->getDomain(),
@@ -261,21 +258,17 @@ class ResponseCalls extends Strategy
         if (($headers->get('Accept') ?: $headers->get('accept')) === 'application/json') {
             $request->setRequestFormat('json');
         }
-
-        return $request;
     }
 
-    private function addQueryParameters(Request $request, array $query): Request
+    private function addQueryParameters(Request $request, array $query): void
     {
         $request->query->add($query);
         $request->server->add(['QUERY_STRING' => http_build_query($query)]);
-        return $request;
     }
 
-    private function addBodyParameters(Request $request, array $body): Request
+    private function addBodyParameters(Request $request, array $body): void
     {
         $request->request->add($body);
-        return $request;
     }
 
     /**