/** * @param string $domain * * @return RouteCollection */ protected function resolveTenantRoutes($domain) { if (null === ($dt = $this->repository->findOneByDomain($domain))) { return $this->error(sprintf('No tenant found for "%s", are you sure you entered the correct domain?', $domain)); } /** @var Tenant $tenant */ $tenant = app('auth.tenant'); $tenant->updateTenancy(new NullUser(), $dt->getTenantOwner(), $dt); $this->resolver->boot($this->router); return $this->routes = $this->router->getRoutes(); }
/** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * * @return mixed */ public function handle($request, \Closure $next) { $config = app('config'); $view = app('view'); $domain = str_replace($config->get('tenancy.multi_site.ignorable_domain_components', []), '', $request->getHost()); $tenant = $this->repository->findOneByDomain($domain); if (!$tenant instanceof TenantParticipant) { throw new \RuntimeException(sprintf('Unable to resolve host "%s" to valid TenantParticipant.', $domain)); } $finder = $view->getFinder(); if ($finder instanceof TenantViewFinder) { $paths = $this->appendPathsInFinder($finder, $tenant); } else { $paths = $this->registerPathsInFinder($view, $finder, $tenant); } // update app config $config->set('app.url', $request->getHost()); $config->set('view.paths', array_merge($config->get('view.paths', []), $paths)); // bind resolved tenant data to container app('auth.tenant')->updateTenancy(new NullUser(), $tenant->getTenantOwner(), $tenant); return $next($request); }
/** * @param string $domain * * @return null|TenantParticipantContract */ public function findOneByDomain($domain) { return $this->repository->findOneByDomain($domain); }