2023-07-28 16:14:55 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App;
|
|
|
|
|
2023-08-17 15:41:25 +02:00
|
|
|
use App\Console\OrmCommand;
|
2023-08-16 16:04:35 +02:00
|
|
|
use App\Console\TestCommand;
|
Expand the response with headers and set status code
diff --git a/app/Controller/BaseController.php b/app/Controller/BaseController.php
deleted file mode 100644
index 8e24148..0000000
--- a/app/Controller/BaseController.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-namespace App\Controller;
-
-use Ardent\Undercurrent\Attribute\Route;
-use Ardent\Undercurrent\Http\GenericResponse;
-use Ardent\Undercurrent\Http\ResponseInterface;
-
-class BaseController
-{
- #[Route('/hello')]
- public function helloWorld(): ResponseInterface
- {
- return new GenericResponse('Hello World!');
- }
-}
\ No newline at end of file
diff --git a/app/Controller/HelloWorldController.php b/app/Controller/HelloWorldController.php
new file mode 100644
index 0000000..8361e9d
--- /dev/null
+++ b/app/Controller/HelloWorldController.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Controller;
+
+use Ardent\Undercurrent\Attribute\Route;
+use Ardent\Undercurrent\Http\GenericResponse;
+use Ardent\Undercurrent\Http\ResponseInterface;
+use Ardent\Undercurrent\Http\StatusEnum;
+
+class HelloWorldController
+{
+ #[Route('/')]
+ public function index(): ResponseInterface
+ {
+ return new GenericResponse('Index, <a href="/hello">Hello</a>');
+ }
+
+ #[Route('/error')]
+ public function error(): ResponseInterface
+ {
+ return new GenericResponse('error', StatusEnum::NOT_FOUND);
+ }
+
+ #[Route('/hello')]
+ public function hello(): ResponseInterface
+ {
+ return new GenericResponse('Hello World!');
+ }
+}
\ No newline at end of file
diff --git a/app/Kernel.php b/app/Kernel.php
index a365d39..8b28577 100644
--- a/app/Kernel.php
+++ b/app/Kernel.php
@@ -2,7 +2,7 @@
namespace App;
-use App\Controller\BaseController;
+use App\Controller\HelloWorldController;
use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Kernel\BaseKernel;
@@ -11,7 +11,7 @@ class Kernel extends BaseKernel
protected function dependencies(ContainerInterface $container): void
{
$this->addControllers($container, [
- BaseController::class,
+ HelloWorldController::class,
]);
}
}
\ No newline at end of file
diff --git a/src/Container/ContainerInterface.php b/src/Container/ContainerInterface.php
index bd50325..7b55a94 100644
--- a/src/Container/ContainerInterface.php
+++ b/src/Container/ContainerInterface.php
@@ -16,7 +16,7 @@ interface ContainerInterface
* @template TClassName
* @param class-string<TClassName> $className
* @return TClassName
- * @throws Exception
+ * @throws ClassNotFoundException
*/
public function get(string $className): object;
}
\ No newline at end of file
diff --git a/src/Http/GenericResponse.php b/src/Http/GenericResponse.php
index d80d350..18852ff 100644
--- a/src/Http/GenericResponse.php
+++ b/src/Http/GenericResponse.php
@@ -7,6 +7,7 @@ class GenericResponse implements ResponseInterface
public function __construct(
private readonly string $body,
private readonly StatusEnum $status = StatusEnum::OK,
+ private readonly array $headers = [],
)
{
}
@@ -20,4 +21,12 @@ class GenericResponse implements ResponseInterface
{
return $this->body;
}
+
+ /**
+ * @inheritDoc
+ */
+ public function getHeaders(): array
+ {
+ return $this->headers;
+ }
}
\ No newline at end of file
diff --git a/src/Http/GenericRouter.php b/src/Http/GenericRouter.php
index 73ce8f1..b2d8e1d 100644
--- a/src/Http/GenericRouter.php
+++ b/src/Http/GenericRouter.php
@@ -2,9 +2,7 @@
namespace Ardent\Undercurrent\Http;
-use App\Controller\BaseController;
-use Ardent\Undercurrent\Attribute\Route;
-use Ardent\Undercurrent\Collector\ClassAttributeCollector;
+use Ardent\Undercurrent\Container\ClassNotFoundException;
use Ardent\Undercurrent\Container\ContainerInterface;
class GenericRouter implements RouterInterface
@@ -16,6 +14,9 @@ class GenericRouter implements RouterInterface
{
}
+ /**
+ * @throws RouteNotFoundException|ClassNotFoundException
+ */
public function dispatch(RequestInterface $request): ResponseInterface
{
foreach ($this->config->getRoutes() as $route) {
diff --git a/src/Http/ResponseInterface.php b/src/Http/ResponseInterface.php
index abdc290..8047eb9 100644
--- a/src/Http/ResponseInterface.php
+++ b/src/Http/ResponseInterface.php
@@ -7,4 +7,9 @@ interface ResponseInterface
public function getStatus(): StatusEnum;
public function getBody(): string;
+
+ /**
+ * @return array<string>
+ */
+ public function getHeaders(): array;
}
\ No newline at end of file
diff --git a/src/Kernel/BaseKernel.php b/src/Kernel/BaseKernel.php
index 7122dcc..634cafc 100644
--- a/src/Kernel/BaseKernel.php
+++ b/src/Kernel/BaseKernel.php
@@ -33,9 +33,16 @@ class BaseKernel
$_SERVER['REQUEST_URI'],
$_REQUEST,
);
-
$router = $container->get(RouterInterface::class);
- echo $router->dispatch($request)->getBody();
+ $response = $router->dispatch($request);
+
+ http_response_code($response->getStatus()->value);
+
+ foreach ($response->getHeaders() as $header) {
+ header($header);
+ }
+
+ echo $response->getBody();
}
protected function addControllers(ContainerInterface $container, array $controllers): void
2023-08-08 17:18:18 +02:00
|
|
|
use App\Controller\HelloWorldController;
|
2023-08-16 16:04:35 +02:00
|
|
|
use Ardent\Undercurrent\Console\CommandsConfig;
|
Move route config to app
diff --git a/app/Kernel.php b/app/Kernel.php
index 0e8e047..4425355 100644
--- a/app/Kernel.php
+++ b/app/Kernel.php
@@ -2,8 +2,16 @@
namespace App;
+use App\Controller\BaseController;
+use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Kernel\BaseKernel;
class Kernel extends BaseKernel
{
+ protected function dependencies(ContainerInterface $container): void
+ {
+ $this->addRoutes($container, [
+ BaseController::class,
+ ]);
+ }
}
\ No newline at end of file
diff --git a/src/Http/RouterConfig.php b/src/Http/RouterConfig.php
index ad856d6..60e5af7 100644
--- a/src/Http/RouterConfig.php
+++ b/src/Http/RouterConfig.php
@@ -4,7 +4,6 @@ namespace Ardent\Undercurrent\Http;
class RouterConfig
{
-
public function __construct(
private readonly array $controllers = [],
)
diff --git a/src/Kernel/BaseKernel.php b/src/Kernel/BaseKernel.php
index a6732f4..149aa8b 100644
--- a/src/Kernel/BaseKernel.php
+++ b/src/Kernel/BaseKernel.php
@@ -2,7 +2,6 @@
namespace Ardent\Undercurrent\Kernel;
-use App\Controller\BaseController;
use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Container\GenericContainer;
use Ardent\Undercurrent\Http\GenericRequest;
@@ -20,12 +19,9 @@ class BaseKernel
->alias(RouterInterface::class, GenericRouter::class)
->alias(ContainerInterface::class, GenericContainer::class)
->add(GenericContainer::class, fn($container) => $container)
- ->add(GenericRouter::class)
- ->add(BaseController::class);
+ ->add(GenericRouter::class);
- $container->add(RouterConfig::class, fn() => new RouterConfig([
- BaseController::class,
- ]));
+ $this->dependencies($container);
$this->render($container);
}
@@ -41,4 +37,17 @@ class BaseKernel
$router = $container->get(RouterInterface::class);
echo $router->dispatch($request)->getBody();
}
+
+ protected function addRoutes(ContainerInterface $container, array $routes): void
+ {
+ foreach ($routes as $route) {
+ $container->add($route);
+ }
+
+ $container->add(RouterConfig::class, fn() => new RouterConfig($routes));
+ }
+
+ protected function dependencies(ContainerInterface $container): void
+ {
+ }
}
\ No newline at end of file
2023-08-08 15:42:57 +02:00
|
|
|
use Ardent\Undercurrent\Container\ContainerInterface;
|
2023-08-16 16:04:35 +02:00
|
|
|
use Ardent\Undercurrent\Http\RoutesConfig;
|
2023-07-28 16:14:55 +02:00
|
|
|
use Ardent\Undercurrent\Kernel\BaseKernel;
|
|
|
|
|
|
|
|
class Kernel extends BaseKernel
|
|
|
|
{
|
Move route config to app
diff --git a/app/Kernel.php b/app/Kernel.php
index 0e8e047..4425355 100644
--- a/app/Kernel.php
+++ b/app/Kernel.php
@@ -2,8 +2,16 @@
namespace App;
+use App\Controller\BaseController;
+use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Kernel\BaseKernel;
class Kernel extends BaseKernel
{
+ protected function dependencies(ContainerInterface $container): void
+ {
+ $this->addRoutes($container, [
+ BaseController::class,
+ ]);
+ }
}
\ No newline at end of file
diff --git a/src/Http/RouterConfig.php b/src/Http/RouterConfig.php
index ad856d6..60e5af7 100644
--- a/src/Http/RouterConfig.php
+++ b/src/Http/RouterConfig.php
@@ -4,7 +4,6 @@ namespace Ardent\Undercurrent\Http;
class RouterConfig
{
-
public function __construct(
private readonly array $controllers = [],
)
diff --git a/src/Kernel/BaseKernel.php b/src/Kernel/BaseKernel.php
index a6732f4..149aa8b 100644
--- a/src/Kernel/BaseKernel.php
+++ b/src/Kernel/BaseKernel.php
@@ -2,7 +2,6 @@
namespace Ardent\Undercurrent\Kernel;
-use App\Controller\BaseController;
use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Container\GenericContainer;
use Ardent\Undercurrent\Http\GenericRequest;
@@ -20,12 +19,9 @@ class BaseKernel
->alias(RouterInterface::class, GenericRouter::class)
->alias(ContainerInterface::class, GenericContainer::class)
->add(GenericContainer::class, fn($container) => $container)
- ->add(GenericRouter::class)
- ->add(BaseController::class);
+ ->add(GenericRouter::class);
- $container->add(RouterConfig::class, fn() => new RouterConfig([
- BaseController::class,
- ]));
+ $this->dependencies($container);
$this->render($container);
}
@@ -41,4 +37,17 @@ class BaseKernel
$router = $container->get(RouterInterface::class);
echo $router->dispatch($request)->getBody();
}
+
+ protected function addRoutes(ContainerInterface $container, array $routes): void
+ {
+ foreach ($routes as $route) {
+ $container->add($route);
+ }
+
+ $container->add(RouterConfig::class, fn() => new RouterConfig($routes));
+ }
+
+ protected function dependencies(ContainerInterface $container): void
+ {
+ }
}
\ No newline at end of file
2023-08-08 15:42:57 +02:00
|
|
|
protected function dependencies(ContainerInterface $container): void
|
|
|
|
{
|
2023-08-16 16:04:35 +02:00
|
|
|
$routes = new RoutesConfig();
|
|
|
|
$routes->add(HelloWorldController::class);
|
|
|
|
$this->addControllers($container, $routes);
|
|
|
|
|
|
|
|
$commands = new CommandsConfig();
|
|
|
|
$commands->add(TestCommand::class);
|
2023-08-17 15:41:25 +02:00
|
|
|
$commands->add(OrmCommand::class);
|
2023-08-16 16:04:35 +02:00
|
|
|
$this->addCommands($container, $commands);
|
Move route config to app
diff --git a/app/Kernel.php b/app/Kernel.php
index 0e8e047..4425355 100644
--- a/app/Kernel.php
+++ b/app/Kernel.php
@@ -2,8 +2,16 @@
namespace App;
+use App\Controller\BaseController;
+use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Kernel\BaseKernel;
class Kernel extends BaseKernel
{
+ protected function dependencies(ContainerInterface $container): void
+ {
+ $this->addRoutes($container, [
+ BaseController::class,
+ ]);
+ }
}
\ No newline at end of file
diff --git a/src/Http/RouterConfig.php b/src/Http/RouterConfig.php
index ad856d6..60e5af7 100644
--- a/src/Http/RouterConfig.php
+++ b/src/Http/RouterConfig.php
@@ -4,7 +4,6 @@ namespace Ardent\Undercurrent\Http;
class RouterConfig
{
-
public function __construct(
private readonly array $controllers = [],
)
diff --git a/src/Kernel/BaseKernel.php b/src/Kernel/BaseKernel.php
index a6732f4..149aa8b 100644
--- a/src/Kernel/BaseKernel.php
+++ b/src/Kernel/BaseKernel.php
@@ -2,7 +2,6 @@
namespace Ardent\Undercurrent\Kernel;
-use App\Controller\BaseController;
use Ardent\Undercurrent\Container\ContainerInterface;
use Ardent\Undercurrent\Container\GenericContainer;
use Ardent\Undercurrent\Http\GenericRequest;
@@ -20,12 +19,9 @@ class BaseKernel
->alias(RouterInterface::class, GenericRouter::class)
->alias(ContainerInterface::class, GenericContainer::class)
->add(GenericContainer::class, fn($container) => $container)
- ->add(GenericRouter::class)
- ->add(BaseController::class);
+ ->add(GenericRouter::class);
- $container->add(RouterConfig::class, fn() => new RouterConfig([
- BaseController::class,
- ]));
+ $this->dependencies($container);
$this->render($container);
}
@@ -41,4 +37,17 @@ class BaseKernel
$router = $container->get(RouterInterface::class);
echo $router->dispatch($request)->getBody();
}
+
+ protected function addRoutes(ContainerInterface $container, array $routes): void
+ {
+ foreach ($routes as $route) {
+ $container->add($route);
+ }
+
+ $container->add(RouterConfig::class, fn() => new RouterConfig($routes));
+ }
+
+ protected function dependencies(ContainerInterface $container): void
+ {
+ }
}
\ No newline at end of file
2023-08-08 15:42:57 +02:00
|
|
|
}
|
2023-07-28 16:14:55 +02:00
|
|
|
}
|