Merge pull request #408 from YannikFirre/patch-1

Correctly normalize resource routes with hyphens
This commit is contained in:
Shalvah
2022-01-24 19:04:45 +01:00
committed by GitHub

View File

@@ -148,18 +148,21 @@ class ExtractedEndpointData extends BaseDTO
$foundResourceParam = false;
foreach (array_reverse($pluralResources) as $pluralResource) {
$singularResource = Str::singular($pluralResource);
$search = ["{$pluralResource}/{{$singularResource}}", "{$pluralResource}/{{$singularResource}?}"];
$singularResourceParam = str_replace('-', '_', $singularResource);
$search = ["{$pluralResource}/{{$singularResourceParam}}", "{$pluralResource}/{{$singularResource}?}"];
// We'll replace with {id} by default, but if the user is using a different key,
// like /users/{user:uuid}, use that instead
$binding = static::getFieldBindingForUrlParam($route, $singularResource, 'id');
if (!$foundResourceParam) {
// Only the last resource param should be {id}
$replace = ["$pluralResource/{{$binding}}", "$pluralResource/{{$binding}?}"];
$foundResourceParam = true;
} else {
// Earlier ones should be {<param>_id}
$replace = ["{$pluralResource}/{{$singularResource}_{$binding}}", "{$pluralResource}/{{$singularResource}_{$binding}?}"];
$replace = ["{$pluralResource}/{{$singularResource}_{$binding}}", "{$pluralResource}/{{$singularResourceParam}_{$binding}?}"];
}
$uri = str_replace($search, $replace, $uri);
}
@@ -183,7 +186,7 @@ class ExtractedEndpointData extends BaseDTO
public function forSerialisation()
{
$copy = $this->except(
// Get rid of all duplicate data
// Get rid of all duplicate data
'cleanQueryParameters', 'cleanUrlParameters', 'fileParameters', 'cleanBodyParameters',
// and objects used only in extraction
'route', 'controller', 'method', 'auth',
@@ -200,6 +203,7 @@ class ExtractedEndpointData extends BaseDTO
if (method_exists($route, 'bindingFieldFor')) {
$binding = $route->bindingFieldFor($paramName);
}
return $binding ?: $default;
}
}
}