55namespace Tempest \Router ;
66
77use BackedEnum ;
8+ use Exception ;
89use Psr \Http \Message \ServerRequestInterface as PsrRequest ;
9- use ReflectionException ;
1010use Tempest \Container \Container ;
1111use Tempest \Core \AppConfig ;
1212use Tempest \Http \GenericRequest ;
1818use Tempest \Http \Responses \Invalid ;
1919use Tempest \Http \Responses \NotFound ;
2020use Tempest \Http \Responses \Ok ;
21+ use Tempest \Http \Responses \ServerError ;
2122use Tempest \Mapper \ObjectFactory ;
2223use Tempest \Reflection \ClassReflector ;
2324use Tempest \Router \Exceptions \ControllerActionHasNoReturn ;
3233use function Tempest \Support \Regex \replace ;
3334use function Tempest \Support \str ;
3435
35- final class GenericRouter implements Router
36+ final readonly class GenericRouter implements Router
3637{
37- private bool $ handleExceptions = true ;
38-
3938 public function __construct (
40- private readonly Container $ container ,
41- private readonly RouteMatcher $ routeMatcher ,
42- private readonly AppConfig $ appConfig ,
43- private readonly RouteConfig $ routeConfig ,
39+ private Container $ container ,
40+ private RouteMatcher $ routeMatcher ,
41+ private AppConfig $ appConfig ,
42+ private RouteConfig $ routeConfig ,
4443 ) {}
4544
46- public function throwExceptions (): self
47- {
48- $ this ->handleExceptions = false ;
49-
50- return $ this ;
51- }
52-
5345 public function dispatch (Request |PsrRequest $ request ): Response
5446 {
5547 return $ this ->processResponse (
@@ -69,25 +61,16 @@ private function processRequest(Request|PsrRequest $request): Response
6961 return new NotFound ();
7062 }
7163
72- $ this ->container ->singleton (
73- MatchedRoute::class,
74- fn () => $ matchedRoute ,
75- );
76-
77- $ callable = $ this ->getCallable ($ matchedRoute );
64+ $ this ->container ->singleton (MatchedRoute::class, fn () => $ matchedRoute );
7865
79- if ($ this ->handleExceptions ) {
80- try {
81- $ request = $ this ->resolveRequest ($ request , $ matchedRoute );
82- $ response = $ callable ($ request );
83- } catch (NotFoundException ) {
84- return new NotFound ();
85- } catch (ValidationException $ validationException ) {
86- return new Invalid ($ validationException ->subject , $ validationException ->failingRules );
87- }
88- } else {
66+ try {
67+ $ callable = $ this ->getCallable ($ matchedRoute );
8968 $ request = $ this ->resolveRequest ($ request , $ matchedRoute );
9069 $ response = $ callable ($ request );
70+ } catch (NotFoundException ) {
71+ return new NotFound ();
72+ } catch (ValidationException $ validationException ) {
73+ return new Invalid ($ validationException ->subject , $ validationException ->failingRules );
9174 }
9275
9376 return $ response ;
0 commit comments