initContainer(); $this->initPortal($portalId); $this->initAutoloads(); $this->initPreloads(); } protected function initContainer() { $this->loaderClassNames['config'] = ConfigLoader::class; $this->container = new PortalContainer(PortalContainerConfiguration::class, $this->loaderClassNames); } protected function initPortal(?string $portalId) { if (!$portalId) { throw new Error("Portal ID was not passed to Portal\Application."); } $entityManager = $this->container->get('entityManager'); $portal = $entityManager->getEntity('Portal', $portalId); if (!$portal) { $portal = $entityManager->getRepository('Portal')->where(['customId' => $portalId])->findOne(); } if (!$portal) { throw new NotFound("Portal {$portalId} not found."); } if (!$portal->get('isActive')) { throw new Forbidden("Portal {$portalId} is not active."); } $this->portal = $portal; $this->container->setPortal($portal); } protected function getPortal() { return $this->portal; } protected function getRouteList() { $routeList = parent::getRouteList(); foreach ($routeList as $i => $route) { if (isset($route['route'])) { if ($route['route']{0} !== '/') { $route['route'] = '/' . $route['route']; } $route['route'] = '/:portalId' . $route['route']; } $routeList[$i] = $route; } return $routeList; } public function runClient() { $this->container->get('clientManager')->display(null, null, [ 'portalId' => $this->getPortal()->id, 'applicationId' => $this->getPortal()->id, 'apiUrl' => 'api/v1/portal-access/' . $this->getPortal()->id, 'appClientClassName' => 'app-portal' ]); exit; } protected function initPreloads() { foreach ($this->getMetadata()->get(['app', 'portalContainerServices']) ?? [] as $name => $defs) { if ($defs['preload'] ?? false) { $this->container->get($name); } } } }