|
2 | 2 |
|
3 | 3 | namespace Dingo\Api\Routing\Adapter; |
4 | 4 |
|
| 5 | +use ArrayIterator; |
5 | 6 | use ReflectionClass; |
6 | 7 | use FastRoute\Dispatcher; |
7 | 8 | use FastRoute\RouteParser; |
@@ -102,11 +103,11 @@ public function dispatch(Request $request, $version) |
102 | 103 | */ |
103 | 104 | public function getRouteProperties($route, Request $request) |
104 | 105 | { |
105 | | - $uri = ltrim($request->getRequestUri(), '/'); |
106 | | - $methods = (array) $request->getMethod(); |
107 | | - $action = $route[1]; |
| 106 | + $uri = ltrim(isset($route['uri']) ? $route['uri'] : $request->getRequestUri(), '/'); |
| 107 | + $methods = isset($route['methods']) ? $route['methods'] : (array) $request->getMethod(); |
| 108 | + $action = (isset($route[1]) && is_array($route[1])) ? $route[1] : $route; |
108 | 109 |
|
109 | | - if ($request->getMethod() === 'GET') { |
| 110 | + if ($request->getMethod() === 'GET' && ! in_array('HEAD', $methods)) { |
110 | 111 | $methods[] = 'HEAD'; |
111 | 112 | } |
112 | 113 |
|
@@ -219,6 +220,29 @@ public function getRoutes($version = null) |
219 | 220 | return $this->routes; |
220 | 221 | } |
221 | 222 |
|
| 223 | + /** |
| 224 | + * Get routes in an iterable form. |
| 225 | + * |
| 226 | + * @param string $version |
| 227 | + * |
| 228 | + * @return \ArrayIterator |
| 229 | + */ |
| 230 | + public function getIterableRoutes($version = null) |
| 231 | + { |
| 232 | + $itrerable = []; |
| 233 | + |
| 234 | + foreach ($this->getRoutes($version) as $version => $routes) { |
| 235 | + foreach ($routes->getData()[0] as $uri => $route) { |
| 236 | + $methods = array_keys($route); |
| 237 | + $route = array_shift($route); |
| 238 | + |
| 239 | + $iterable[$version][$uri] = array_merge($route, compact('uri', 'methods')); |
| 240 | + } |
| 241 | + } |
| 242 | + |
| 243 | + return new ArrayIterator($iterable); |
| 244 | + } |
| 245 | + |
222 | 246 | /** |
223 | 247 | * Set the routes on the adapter. |
224 | 248 | * |
|
0 commit comments