diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..d163579e --- /dev/null +++ b/TODO.md @@ -0,0 +1,2 @@ +- Add tests for bindings +- Add tests for config overrdes diff --git a/src/Tools/ResponseStrategies/ResponseCallStrategy.php b/src/Tools/ResponseStrategies/ResponseCallStrategy.php index 8d30a4ae..eb71dbb3 100644 --- a/src/Tools/ResponseStrategies/ResponseCallStrategy.php +++ b/src/Tools/ResponseStrategies/ResponseCallStrategy.php @@ -3,6 +3,7 @@ namespace Mpociot\ApiDoc\Tools\ResponseStrategies; use Dingo\Api\Dispatcher; +use Illuminate\Support\Str; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Route; @@ -94,11 +95,19 @@ private function prepareRequest(Route $route, array $rulesToApply, array $bodyPa 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; } @@ -107,6 +116,7 @@ protected function replaceUrlParameterBindings(Route $route, $bindings) * @param array $config * * @return void + * * @deprecated in favour of Laravel config variables */ private function setEnvironmentVariables(array $env)