|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace Knuckles\Scribe\Extracting\Strategies\UrlParameters;
|
|
|
|
|
|
+use Illuminate\Database\Eloquent\Model;
|
|
|
use Knuckles\Camel\Extraction\ExtractedEndpointData;
|
|
|
use Illuminate\Support\Str;
|
|
|
use Knuckles\Scribe\Extracting\ParamHelpers;
|
|
@@ -12,8 +13,6 @@ class GetFromLaravelAPI extends Strategy
|
|
|
{
|
|
|
use ParamHelpers;
|
|
|
|
|
|
- public string $stage = 'urlParameters';
|
|
|
-
|
|
|
public function __invoke(ExtractedEndpointData $endpointData, array $routeRules)
|
|
|
{
|
|
|
if (Utils::isLumen()) {
|
|
@@ -38,6 +37,32 @@ class GetFromLaravelAPI extends Strategy
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- return $parameters;
|
|
|
+
|
|
|
+ // Infer proper types for any bound models
|
|
|
+ // Eg if $user model has an ID primary key and is injected, {user} param should be ID
|
|
|
+ foreach ($endpointData->method->getParameters() as $param) {
|
|
|
+ $paramType = $param->getType();
|
|
|
+ try {
|
|
|
+ $parameterClassName = $paramType->getName();
|
|
|
+ $parameterInstance = new $parameterClassName;
|
|
|
+ if ($parameterInstance instanceof Model) {
|
|
|
+ if (isset($parameters[$param->getName()])) {
|
|
|
+ $paramName = $param->getName();
|
|
|
+ } else if (isset($parameters['id'])) {
|
|
|
+ $paramName = 'id';
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $type = $parameterInstance->getKeyType();
|
|
|
+ $parameters[$paramName]['type'] = $type;
|
|
|
+ $parameters[$paramName]['example'] = $this->generateDummyValue($this->normalizeTypeName($type));
|
|
|
+ }
|
|
|
+ } catch (\Throwable $e) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $parameters;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|