Add logger
diff --git a/src/Http/GenericRouter.php b/src/Http/GenericRouter.php
index 334ecac..5a2ac6f 100644
--- a/src/Http/GenericRouter.php
+++ b/src/Http/GenericRouter.php
@@ -4,6 +4,7 @@ namespace Ardent\Undercurrent\Http;
 use Ardent\Undercurrent\Container\ClassNotFoundException;
 use Ardent\Undercurrent\Container\ContainerInterface;
+use Ardent\Undercurrent\Logger\LoggerInterface;
 use Exception;
 use ReflectionMethod;
@@ -11,6 +12,7 @@ class GenericRouter implements RouterInterface
 {
     public function __construct(
         private readonly ContainerInterface $container,
+        private readonly LoggerInterface    $logger,
         private readonly RouterConfig       $config,
     )
     {
@@ -28,6 +30,8 @@ class GenericRouter implements RouterInterface
                 continue;
             }
+            $this->logger->add(sprintf('Matched route %s', $route->getRoute()->path));
+
             return $this->container->call(
                 $route->getController(),
                 $route->getMethod(),
@@ -44,9 +48,9 @@ class GenericRouter implements RouterInterface
             return [];
         }
-        $result = preg_match_all('/{(\w+)}/', $routeUri, $tokens);
+        $result = preg_match_all('/{\w+}/', $routeUri, $tokens);
-        if (!$result) {
+        if (!$result === null) {
             return null;
         }
@@ -59,6 +63,7 @@ class GenericRouter implements RouterInterface
             ) . '$/';
         $result = preg_match($matchingRegex, $requestUri, $matches);
+
         if (!$result) {
             return null;
         }
diff --git a/src/Kernel/BaseKernel.php b/src/Kernel/BaseKernel.php
index 634cafc..60164d8 100644
--- a/src/Kernel/BaseKernel.php
+++ b/src/Kernel/BaseKernel.php
@@ -5,10 +5,15 @@ namespace Ardent\Undercurrent\Kernel;
 use Ardent\Undercurrent\Container\ContainerInterface;
 use Ardent\Undercurrent\Container\GenericContainer;
 use Ardent\Undercurrent\Http\GenericRequest;
+use Ardent\Undercurrent\Http\GenericResponse;
 use Ardent\Undercurrent\Http\GenericRouter;
 use Ardent\Undercurrent\Http\MethodEnum;
 use Ardent\Undercurrent\Http\RouterConfig;
 use Ardent\Undercurrent\Http\RouterInterface;
+use Ardent\Undercurrent\Http\StatusEnum;
+use Ardent\Undercurrent\Logger\LogContainer;
+use Ardent\Undercurrent\Logger\LoggerInterface;
+use Exception;
 class BaseKernel
 {
@@ -18,8 +23,10 @@ class BaseKernel
         $container
             ->alias(RouterInterface::class, GenericRouter::class)
             ->alias(ContainerInterface::class, GenericContainer::class)
+            ->alias(LoggerInterface::class, LogContainer::class)
             ->add(GenericContainer::class, fn($container) => $container)
-            ->add(GenericRouter::class);
+            ->add(GenericRouter::class)
+            ->add(LogContainer::class);
         $this->dependencies($container);
@@ -34,7 +41,20 @@ class BaseKernel
             $_REQUEST,
         );
         $router = $container->get(RouterInterface::class);
-        $response = $router->dispatch($request);
+        $log = $container->get(LogContainer::class);
+        try {
+            $response = $router->dispatch($request);
+        } catch (\Throwable $e) {
+            $response = new GenericResponse(
+                $e->getMessage(),
+                StatusEnum::NOT_FOUND
+            );
+            //$response = $container->get(RouterConfig::class)->getExceptionRoute()->getController()::exception($e);
+        }
+
+        foreach ($log->getLogs() as $log) {
+            echo sprintf('<p>%s</p>', $log);
+        }
         http_response_code($response->getStatus()->value);
diff --git a/src/Logger/LogContainer.php b/src/Logger/LogContainer.php
new file mode 100644
index 0000000..39f3855
--- /dev/null
+++ b/src/Logger/LogContainer.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Ardent\Undercurrent\Logger;
+
+class LogContainer implements LoggerInterface
+{
+    private array $logs = [];
+
+    public function add(string $log): void
+    {
+        $this->logs[] = $log;
+    }
+
+    public function getLogs(): array
+    {
+        return $this->logs;
+    }
+}
\ No newline at end of file
diff --git a/src/Logger/LoggerInterface.php b/src/Logger/LoggerInterface.php
new file mode 100644
index 0000000..1b2867a
--- /dev/null
+++ b/src/Logger/LoggerInterface.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Ardent\Undercurrent\Logger;
+
+interface LoggerInterface
+{
+    public function add(string $log): void;
+}
\ No newline at end of file
			
			
This commit is contained in:
		| @@ -4,6 +4,7 @@ namespace Ardent\Undercurrent\Http; | |||||||
|  |  | ||||||
| use Ardent\Undercurrent\Container\ClassNotFoundException; | use Ardent\Undercurrent\Container\ClassNotFoundException; | ||||||
| use Ardent\Undercurrent\Container\ContainerInterface; | use Ardent\Undercurrent\Container\ContainerInterface; | ||||||
|  | use Ardent\Undercurrent\Logger\LoggerInterface; | ||||||
| use Exception; | use Exception; | ||||||
| use ReflectionMethod; | use ReflectionMethod; | ||||||
|  |  | ||||||
| @@ -11,6 +12,7 @@ class GenericRouter implements RouterInterface | |||||||
| { | { | ||||||
|     public function __construct( |     public function __construct( | ||||||
|         private readonly ContainerInterface $container, |         private readonly ContainerInterface $container, | ||||||
|  |         private readonly LoggerInterface    $logger, | ||||||
|         private readonly RouterConfig       $config, |         private readonly RouterConfig       $config, | ||||||
|     ) |     ) | ||||||
|     { |     { | ||||||
| @@ -28,6 +30,8 @@ class GenericRouter implements RouterInterface | |||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             $this->logger->add(sprintf('Matched route %s', $route->getRoute()->path)); | ||||||
|  |  | ||||||
|             return $this->container->call( |             return $this->container->call( | ||||||
|                 $route->getController(), |                 $route->getController(), | ||||||
|                 $route->getMethod(), |                 $route->getMethod(), | ||||||
| @@ -44,9 +48,9 @@ class GenericRouter implements RouterInterface | |||||||
|             return []; |             return []; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         $result = preg_match_all('/{(\w+)}/', $routeUri, $tokens); |         $result = preg_match_all('/{\w+}/', $routeUri, $tokens); | ||||||
|  |  | ||||||
|         if (!$result) { |         if (!$result === null) { | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -59,6 +63,7 @@ class GenericRouter implements RouterInterface | |||||||
|             ) . '$/'; |             ) . '$/'; | ||||||
|  |  | ||||||
|         $result = preg_match($matchingRegex, $requestUri, $matches); |         $result = preg_match($matchingRegex, $requestUri, $matches); | ||||||
|  |  | ||||||
|         if (!$result) { |         if (!$result) { | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -5,10 +5,15 @@ namespace Ardent\Undercurrent\Kernel; | |||||||
| use Ardent\Undercurrent\Container\ContainerInterface; | use Ardent\Undercurrent\Container\ContainerInterface; | ||||||
| use Ardent\Undercurrent\Container\GenericContainer; | use Ardent\Undercurrent\Container\GenericContainer; | ||||||
| use Ardent\Undercurrent\Http\GenericRequest; | use Ardent\Undercurrent\Http\GenericRequest; | ||||||
|  | use Ardent\Undercurrent\Http\GenericResponse; | ||||||
| use Ardent\Undercurrent\Http\GenericRouter; | use Ardent\Undercurrent\Http\GenericRouter; | ||||||
| use Ardent\Undercurrent\Http\MethodEnum; | use Ardent\Undercurrent\Http\MethodEnum; | ||||||
| use Ardent\Undercurrent\Http\RouterConfig; | use Ardent\Undercurrent\Http\RouterConfig; | ||||||
| use Ardent\Undercurrent\Http\RouterInterface; | use Ardent\Undercurrent\Http\RouterInterface; | ||||||
|  | use Ardent\Undercurrent\Http\StatusEnum; | ||||||
|  | use Ardent\Undercurrent\Logger\LogContainer; | ||||||
|  | use Ardent\Undercurrent\Logger\LoggerInterface; | ||||||
|  | use Exception; | ||||||
|  |  | ||||||
| class BaseKernel | class BaseKernel | ||||||
| { | { | ||||||
| @@ -18,8 +23,10 @@ class BaseKernel | |||||||
|         $container |         $container | ||||||
|             ->alias(RouterInterface::class, GenericRouter::class) |             ->alias(RouterInterface::class, GenericRouter::class) | ||||||
|             ->alias(ContainerInterface::class, GenericContainer::class) |             ->alias(ContainerInterface::class, GenericContainer::class) | ||||||
|  |             ->alias(LoggerInterface::class, LogContainer::class) | ||||||
|             ->add(GenericContainer::class, fn($container) => $container) |             ->add(GenericContainer::class, fn($container) => $container) | ||||||
|             ->add(GenericRouter::class); |             ->add(GenericRouter::class) | ||||||
|  |             ->add(LogContainer::class); | ||||||
|  |  | ||||||
|         $this->dependencies($container); |         $this->dependencies($container); | ||||||
|  |  | ||||||
| @@ -34,7 +41,20 @@ class BaseKernel | |||||||
|             $_REQUEST, |             $_REQUEST, | ||||||
|         ); |         ); | ||||||
|         $router = $container->get(RouterInterface::class); |         $router = $container->get(RouterInterface::class); | ||||||
|         $response = $router->dispatch($request); |         $log = $container->get(LogContainer::class); | ||||||
|  |         try { | ||||||
|  |             $response = $router->dispatch($request); | ||||||
|  |         } catch (\Throwable $e) { | ||||||
|  |             $response = new GenericResponse( | ||||||
|  |                 $e->getMessage(), | ||||||
|  |                 StatusEnum::NOT_FOUND | ||||||
|  |             ); | ||||||
|  |             //$response = $container->get(RouterConfig::class)->getExceptionRoute()->getController()::exception($e); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         foreach ($log->getLogs() as $log) { | ||||||
|  |             echo sprintf('<p>%s</p>', $log); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         http_response_code($response->getStatus()->value); |         http_response_code($response->getStatus()->value); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								src/Logger/LogContainer.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/Logger/LogContainer.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Logger; | ||||||
|  |  | ||||||
|  | class LogContainer implements LoggerInterface | ||||||
|  | { | ||||||
|  |     private array $logs = []; | ||||||
|  |  | ||||||
|  |     public function add(string $log): void | ||||||
|  |     { | ||||||
|  |         $this->logs[] = $log; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getLogs(): array | ||||||
|  |     { | ||||||
|  |         return $this->logs; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								src/Logger/LoggerInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/Logger/LoggerInterface.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Logger; | ||||||
|  |  | ||||||
|  | interface LoggerInterface | ||||||
|  | { | ||||||
|  |     public function add(string $log): void; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user