*/ class BackOfficePathMiddleware implements HttpKernelInterface { /** @var \Symfony\Component\HttpKernel\HttpKernelInterface */ protected $app; /** @var \Symfony\Component\DependencyInjection\Container */ protected $container; /** * Class constructor * * @param \Symfony\Component\HttpKernel\HttpKernelInterface $app Kernel stack * @param \Symfony\Component\DependencyInjection\Container $container Services container */ public function __construct(HttpKernelInterface $app, Container $container) { $this->app = $app; $this->container = $container; } public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { if ($type === HttpKernelInterface::MASTER_REQUEST) { $prefix = ConfigQuery::read(BackOfficePath::CONFIG_PATH); $defaultEnabled = (int) ConfigQuery::read(BackOfficePath::CONFIG_USE_DEFAULT_PATH, 1); $pathInfo = $request->getPathInfo(); // Discard the default /admin URL $discardDefaultPath = $defaultEnabled !== 1 && strpos($pathInfo, '/' . BackOfficePath::DEFAULT_THELIA_PREFIX) === 0 && $prefix !== null && $prefix !== '' ; if ($discardDefaultPath) { $this->container->enterScope('request'); $this->container->set('request', $request, 'request'); /** @var \Thelia\Core\Template\ParserInterface $parser */ $parser = $this->container->get('thelia.parser'); $parser->setTemplateDefinition( $this->container->get('thelia.template_helper')->getActiveFrontTemplate() ); $this->container->get('request.context')->fromRequest($request); $response = new Response($parser->render(ConfigQuery::getPageNotFoundView()), 404); $this->container->leaveScope('request'); return $response; } if (strpos($pathInfo, '/' . $prefix) === 0 && $prefix !== null && $prefix !== '' ) { $customAdminPath = BackOfficePath::replaceUrl( $request->getRequestUri(), $prefix, BackOfficePath::DEFAULT_THELIA_PREFIX ); $request->server->set('REQUEST_URI', $customAdminPath); $request->attributes->set(BackOfficePath::IS_CUSTOM_ADMIN_PATH, true); $request->initialize( $request->query->all(), $request->request->all(), $request->attributes->all(), $request->cookies->all(), $request->files->all(), $request->server->all(), $request->getContent() ); } } return $this->app->handle($request, $type, $catch); } }