Преглед на файлове

Centralizes request, user and metadata to be injected into the template engine during boot.

michelphp преди 3 седмици
родител
ревизия
0e5c071a81
променени са 4 файла, в които са добавени 43 реда и са изтрити 1 реда
  1. 7 0
      src/BaseKernel.php
  2. 1 0
      src/Handler/RequestHandler.php
  3. 29 0
      src/Http/RequestContext.php
  4. 6 1
      src/Package/MichelCorePackage.php

+ 7 - 0
src/BaseKernel.php

@@ -14,6 +14,7 @@ use Michel\Framework\Core\Http\Exception\HttpException;
 use Michel\Framework\Core\Http\Exception\HttpExceptionInterface;
 use InvalidArgumentException;
 use Michel\Framework\Core\Finder\ControllerFinder;
+use Michel\Framework\Core\Http\RequestContext;
 use Michel\Package\PackageInterface;
 use Psr\Container\ContainerInterface;
 use Psr\Http\Message\ResponseInterface;
@@ -75,6 +76,12 @@ abstract class BaseKernel
             $request = $request->withAttribute('request_id', strtoupper(uniqid('REQ')));
             $request = $request->withAttribute('debug_collector', $this->debugDataCollector);
 
+            /**
+             * @var RequestContext $context
+             */
+            $context = $this->container->get(RequestContext::class);
+            $context->setRequest($request);
+
             $requestHandler = new RequestHandler($this->container, $this->middlewareCollection);
             $response =  $requestHandler->handle($request);
             if ($response->getStatusCode() >= 400 && $response->getStatusCode() < 600) {

+ 1 - 0
src/Handler/RequestHandler.php

@@ -4,6 +4,7 @@ namespace Michel\Framework\Core\Handler;
 
 use LogicException;
 use Michel\Framework\Core\Debug\DebugDataCollector;
+use Michel\Framework\Core\Http\RequestContext;
 use Psr\Container\ContainerInterface;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;

+ 29 - 0
src/Http/RequestContext.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace Michel\Framework\Core\Http;
+
+use Psr\Http\Message\ServerRequestInterface;
+
+class RequestContext
+{
+    private ?ServerRequestInterface $request = null;
+    private ?object $user = null;
+
+    public function setRequest(ServerRequestInterface $request): void
+    {
+        $this->request = $request;
+    }
+    public function getRequest(): ?ServerRequestInterface
+    {
+        return $this->request;
+    }
+
+    public function setUser(object $user): void
+    {
+        $this->user = $user;
+    }
+    public function getUser(): ?object
+    {
+        return $this->user;
+    }
+}

+ 6 - 1
src/Package/MichelCorePackage.php

@@ -17,6 +17,7 @@ use Michel\Framework\Core\Config\ConfigProvider;
 use Michel\Framework\Core\Debug\DebugDataCollector;
 use Michel\Framework\Core\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
 use Michel\Framework\Core\ErrorHandler\ExceptionHandler;
+use Michel\Framework\Core\Http\RequestContext;
 use Michel\Framework\Core\Middlewares\DebugMiddleware;
 use Michel\Framework\Core\Middlewares\ForceHttpsMiddleware;
 use Michel\Framework\Core\Middlewares\IpRestrictionMiddleware;
@@ -36,6 +37,9 @@ final class MichelCorePackage implements PackageInterface
     public function getDefinitions(): array
     {
         return [
+            RequestContext::class => static function (ContainerInterface $container): RequestContext {
+                return new RequestContext();
+            },
             ConfigProvider::class => static function (ContainerInterface $container): ConfigProvider {
                 return new ConfigProvider($container);
             },
@@ -74,7 +78,8 @@ final class MichelCorePackage implements PackageInterface
                     $container->get('michel.environment') === 'dev',
                     filepath_join($container->get('michel.cache_dir'), 'pure'),
                     [
-                        '_container' => $container
+                        '_container' => $container,
+                        'context' => $container->get(RequestContext::class)
                     ]
                 );
             },