Parcourir la source

add helpers for http context

michelphp il y a 3 semaines
Parent
commit
d3ca888f47
3 fichiers modifiés avec 54 ajouts et 1 suppressions
  1. 37 0
      functions/helpers.php
  2. 14 0
      src/Http/RequestContext.php
  3. 3 1
      src/Package/MichelCorePackage.php

+ 37 - 0
functions/helpers.php

@@ -2,6 +2,7 @@
 
 use Composer\Autoload\ClassLoader;
 use Michel\Framework\Core\App;
+use Michel\RouterInterface;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
 use Psr\Container\NotFoundExceptionInterface;
@@ -214,3 +215,39 @@ if (!function_exists('render')) {
         return response(render_view($view, $context), $status);
     }
 }
+
+
+if (!function_exists('url')) {
+
+    /**
+     * Generates Absolute URL for a route.
+     *
+     * @param string $name
+     * @param array $parameters
+     * @return string The dependency injection container.
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    function url(string $name, array $parameters): string
+    {
+        /**
+         * @var RouterInterface $router
+         */
+        $router =  App::getContainer()->get(RouterInterface::class);
+        return $router->generateUri($name, $parameters, true);
+    }
+}
+
+if (!function_exists('assets')) {
+
+    /**
+     * Generates a URL for an asset.
+     *
+     * @param string $path
+     * @return string The dependency injection container.
+     */
+    function assets(string $path): string
+    {
+        return '/'.ltrim($path, '/');
+    }
+}

+ 14 - 0
src/Http/RequestContext.php

@@ -2,6 +2,8 @@
 
 namespace Michel\Framework\Core\Http;
 
+use Michel\Route;
+use Michel\RouterMiddleware;
 use Psr\Http\Message\ServerRequestInterface;
 
 class RequestContext
@@ -18,6 +20,18 @@ class RequestContext
         return $this->request;
     }
 
+    public function getCurrentRoute(): ?string
+    {
+        if ($this->request ===  null) {
+            return null;
+        }
+        $route = $this->request->getAttribute(RouterMiddleware::ATTRIBUTE_KEY);
+        if (!$route instanceof Route) {
+            return null;
+        }
+        return $route->getName();
+    }
+
     public function setUser(object $user): void
     {
         $this->user = $user;

+ 3 - 1
src/Package/MichelCorePackage.php

@@ -79,7 +79,9 @@ final class MichelCorePackage implements PackageInterface
                     filepath_join($container->get('michel.cache_dir'), 'pure'),
                     [
                         '_container' => $container,
-                        'context' => $container->get(RequestContext::class)
+                        '_env' => $container->get('michel.environment'),
+                        '_debug' => $container->get('michel.debug'),
+                        '_context' => $container->get(RequestContext::class)
                     ]
                 );
             },