|
6 | 6 |
|
7 | 7 | use Closure; |
8 | 8 | use Psr\Http\Message\ServerRequestInterface as PsrRequest; |
| 9 | +use ReflectionException; |
9 | 10 | use Tempest\Container\Container; |
10 | 11 | use Tempest\Core\AppConfig; |
11 | 12 | use Tempest\Http\Exceptions\ControllerActionHasNoReturn; |
@@ -120,23 +121,27 @@ private function getCallable(MatchedRoute $matchedRoute): Closure |
120 | 121 |
|
121 | 122 | public function toUri(array|string $action, ...$params): string |
122 | 123 | { |
123 | | - if (is_array($action)) { |
124 | | - $controllerClass = $action[0]; |
125 | | - $reflection = new ClassReflector($controllerClass); |
126 | | - $controllerMethod = $reflection->getMethod($action[1]); |
127 | | - } else { |
128 | | - $controllerClass = $action; |
129 | | - $reflection = new ClassReflector($controllerClass); |
130 | | - $controllerMethod = $reflection->getMethod('__invoke'); |
131 | | - } |
| 124 | + try { |
| 125 | + if (is_array($action)) { |
| 126 | + $controllerClass = $action[0]; |
| 127 | + $reflection = new ClassReflector($controllerClass); |
| 128 | + $controllerMethod = $reflection->getMethod($action[1]); |
| 129 | + } else { |
| 130 | + $controllerClass = $action; |
| 131 | + $reflection = new ClassReflector($controllerClass); |
| 132 | + $controllerMethod = $reflection->getMethod('__invoke'); |
| 133 | + } |
132 | 134 |
|
133 | | - $routeAttribute = $controllerMethod->getAttribute(Route::class); |
| 135 | + $routeAttribute = $controllerMethod->getAttribute(Route::class); |
134 | 136 |
|
135 | | - if ($routeAttribute === null) { |
136 | | - throw new InvalidRouteException($controllerClass, $controllerMethod->getName()); |
137 | | - } |
| 137 | + $uri = $routeAttribute->uri; |
| 138 | + } catch (ReflectionException) { |
| 139 | + if (is_array($action)) { |
| 140 | + throw new InvalidRouteException($action[0], $action[1]); |
| 141 | + } |
138 | 142 |
|
139 | | - $uri = $routeAttribute->uri; |
| 143 | + $uri = $action; |
| 144 | + } |
140 | 145 |
|
141 | 146 | $queryParams = []; |
142 | 147 |
|
|
0 commit comments