routeGroups = $routeGroups; $this->baseUrl = $baseUrl; } public function getCollection() { try { URL::forceRootUrl($this->baseUrl); if (Str::startsWith($this->baseUrl, 'https://')) { URL::forceScheme('https'); } } catch (\Error $e) { echo "Warning: Couldn't force base url as your version of Lumen doesn't have the forceRootUrl method.\n"; echo "You should probably double check URLs in your generated Postman collection.\n"; } $collection = [ 'variables' => [], 'info' => [ 'name' => config('apidoc.postman.name') ?: config('app.name').' API', '_postman_id' => Uuid::uuid4()->toString(), 'description' => config('apidoc.postman.description') ?: '', 'schema' => 'https://schema.getpostman.com/json/collection/v2.0.0/collection.json', ], 'item' => $this->routeGroups->map(function ($routes, $groupName) { return [ 'name' => $groupName, 'description' => '', 'item' => $routes->map(function ($route) { $mode = $route['methods'][0] === 'PUT' ? 'urlencoded' : 'formdata'; return [ 'name' => $route['metadata']['title'] != '' ? $route['metadata']['title'] : url($route['uri']), 'request' => [ 'url' => url($route['uri']).(collect($route['queryParameters'])->isEmpty() ? '' : ('?'.implode('&', collect($route['queryParameters'])->map(function ($parameter, $key) { return urlencode($key).'='.urlencode($parameter['value'] ?? ''); })->all()))), 'method' => $route['methods'][0], 'header' => collect($route['headers']) ->union([ 'Accept' => 'application/json', ]) ->map(function ($value, $header) { return [ 'key' => $header, 'value' => $value, ]; }) ->values()->all(), 'body' => [ 'mode' => $mode, $mode => collect($route['bodyParameters'])->map(function ($parameter, $key) { return [ 'key' => $key, 'value' => $parameter['value'] ?? '', 'type' => 'text', 'enabled' => true, ]; })->values()->toArray(), ], 'description' => $route['metadata']['description'], 'response' => [], ], ]; })->toArray(), ]; })->values()->toArray(), ]; return json_encode($collection); } }