瀏覽代碼

Allow binding prefixes (closes #488)

shalvah 6 年之前
父節點
當前提交
d811427f79
共有 2 個文件被更改,包括 14 次插入3 次删除
  1. 2 0
      TODO.md
  2. 12 3
      src/Tools/ResponseStrategies/ResponseCallStrategy.php

+ 2 - 0
TODO.md

@@ -0,0 +1,2 @@
+- Add tests for bindings
+- Add tests for config overrdes

+ 12 - 3
src/Tools/ResponseStrategies/ResponseCallStrategy.php

@@ -6,6 +6,7 @@ use Dingo\Api\Dispatcher;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Routing\Route;
+use Illuminate\Support\Str;
 use Mpociot\ApiDoc\Tools\Traits\ParamHelpers;
 
 /**
@@ -94,11 +95,19 @@ class ResponseCallStrategy
     protected function replaceUrlParameterBindings(Route $route, $bindings)
     {
         $uri = $route->uri();
-        foreach ($bindings as $parameter => $binding) {
-            $uri = str_replace($parameter, $binding, $uri);
+        foreach ($bindings as $path => $binding) {
+            // So we can support partial bindings like
+            // 'bindings' => [
+            //  'foo/{type}' => 4,
+            //  'bar/{type}' => 2
+            //],
+            if (Str::is("*$path*", $uri)) {
+                preg_match('/({.+?})/', $path, $parameter);
+                $uri = str_replace("{$parameter['1']}", $binding, $uri);
+            }
         }
         // Replace any unbound parameters with '1'
-        $uri = preg_replace('/{(.*?)}/', 1, $uri);
+        $uri = preg_replace('/{(.+?)}/', 1, $uri);
 
         return $uri;
     }