@@ -146,6 +146,7 @@ public function __construct(Adapter $server, string $timezone)
146146 \date_default_timezone_set ($ timezone );
147147 $ this ->files = new Files ();
148148 $ this ->server = $ server ;
149+ $ this ->container = $ server ->getContainer ();
149150 }
150151
151152 /**
@@ -427,6 +428,16 @@ public function getResources(array $list): array
427428 * @param string[] $injections
428429 */
429430 public function setResource (string $ name , callable $ callback , array $ injections = []): void
431+ {
432+ $ this ->container ->set ($ name , $ callback , $ injections );
433+ }
434+
435+ /**
436+ * Set a request-scoped resource on the current request's container.
437+ *
438+ * @param string[] $injections
439+ */
440+ protected function setRequestResource (string $ name , callable $ callback , array $ injections = []): void
430441 {
431442 $ this ->server ->getContainer ()->set ($ name , $ callback , $ injections );
432443 }
@@ -648,7 +659,9 @@ public function execute(Route $route, Request $request): static
648659 {
649660 $ arguments = [];
650661 $ groups = $ route ->getGroups ();
651- $ pathValues = $ route ->getPathValues ($ request );
662+
663+ $ preparedPath = Router::preparePath ($ route ->getMatchedPath ());
664+ $ pathValues = $ route ->getPathValues ($ request , $ preparedPath [0 ]);
652665
653666 try {
654667 if ($ route ->getHook ()) {
@@ -690,7 +703,7 @@ public function execute(Route $route, Request $request): static
690703 }
691704 }
692705 } catch (\Throwable $ e ) {
693- $ this ->setResource ('error ' , fn () => $ e , []);
706+ $ this ->setRequestResource ('error ' , fn () => $ e , []);
694707
695708 foreach ($ groups as $ group ) {
696709 foreach (self ::$ errors as $ error ) { // Group error hooks
@@ -782,16 +795,16 @@ public function run(Request $request, Response $response): static
782795 $ response ->setCompressionSupported ($ this ->compressionSupported );
783796 }
784797
785- $ this ->setResource ('request ' , fn () => $ request );
786- $ this ->setResource ('response ' , fn () => $ response );
798+ $ this ->setRequestResource ('request ' , fn () => $ request );
799+ $ this ->setRequestResource ('response ' , fn () => $ response );
787800
788801 try {
789802 foreach (self ::$ requestHooks as $ hook ) {
790803 $ arguments = $ this ->getArguments ($ hook , [], []);
791804 \call_user_func_array ($ hook ->getAction (), $ arguments );
792805 }
793806 } catch (\Exception $ e ) {
794- $ this ->setResource ('error ' , fn () => $ e , []);
807+ $ this ->setRequestResource ('error ' , fn () => $ e , []);
795808
796809 foreach (self ::$ errors as $ error ) { // Global error hooks
797810 if (\in_array ('* ' , $ error ->getGroups ())) {
@@ -821,7 +834,7 @@ public function run(Request $request, Response $response): static
821834 $ route = $ this ->match ($ request );
822835 $ groups = ($ route instanceof Route) ? $ route ->getGroups () : [];
823836
824- $ this ->setResource ('route ' , fn () => $ route , []);
837+ $ this ->setRequestResource ('route ' , fn () => $ route , []);
825838
826839 if (self ::REQUEST_METHOD_HEAD == $ method ) {
827840 $ method = self ::REQUEST_METHOD_GET ;
@@ -849,7 +862,7 @@ public function run(Request $request, Response $response): static
849862 foreach (self ::$ errors as $ error ) { // Global error hooks
850863 /** @var Hook $error */
851864 if (\in_array ('* ' , $ error ->getGroups ())) {
852- $ this ->setResource ('error ' , function () use ($ e ) {
865+ $ this ->setRequestResource ('error ' , function () use ($ e ) {
853866 return $ e ;
854867 }, []);
855868 \call_user_func_array ($ error ->getAction (), $ this ->getArguments ($ error , [], $ request ->getParams ()));
@@ -866,7 +879,7 @@ public function run(Request $request, Response $response): static
866879 $ path = \parse_url ($ request ->getURI (), PHP_URL_PATH );
867880 $ route ->path ($ path );
868881
869- $ this ->setResource ('route ' , fn () => $ route , []);
882+ $ this ->setRequestResource ('route ' , fn () => $ route , []);
870883 }
871884
872885 if (null !== $ route ) {
@@ -889,7 +902,7 @@ public function run(Request $request, Response $response): static
889902 } catch (\Throwable $ e ) {
890903 foreach (self ::$ errors as $ error ) { // Global error hooks
891904 if (\in_array ('* ' , $ error ->getGroups ())) {
892- $ this ->setResource ('error ' , function () use ($ e ) {
905+ $ this ->setRequestResource ('error ' , function () use ($ e ) {
893906 return $ e ;
894907 }, []);
895908 \call_user_func_array ($ error ->getAction (), $ this ->getArguments ($ error , [], $ request ->getParams ()));
@@ -899,7 +912,7 @@ public function run(Request $request, Response $response): static
899912 } else {
900913 foreach (self ::$ errors as $ error ) { // Global error hooks
901914 if (\in_array ('* ' , $ error ->getGroups ())) {
902- $ this ->setResource ('error ' , fn () => new Exception ('Not Found ' , 404 ), []);
915+ $ this ->setRequestResource ('error ' , fn () => new Exception ('Not Found ' , 404 ), []);
903916 \call_user_func_array ($ error ->getAction (), $ this ->getArguments ($ error , [], $ request ->getParams ()));
904917 }
905918 }
0 commit comments