Chris@0: router = $router; Chris@0: $this->accessManager = $access_manager; Chris@0: $this->account = $account; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __call($name, $arguments) { Chris@0: // Ensure to call every other function to the router. Chris@0: return call_user_func_array([$this->router, $name], $arguments); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setContext(SymfonyRequestContext $context) { Chris@0: if ($this->router instanceof RequestContextAwareInterface) { Chris@0: $this->router->setContext($context); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContext() { Chris@0: if ($this->router instanceof RequestContextAwareInterface) { Chris@0: return $this->router->getContext(); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException Chris@0: * Thrown when access checking failed. Chris@0: */ Chris@0: public function matchRequest(Request $request) { Chris@0: $parameters = $this->router->matchRequest($request); Chris@0: $request->attributes->add($parameters); Chris@0: $this->checkAccess($request); Chris@0: // We can not return $parameters because the access check can change the Chris@0: // request attributes. Chris@0: return $request->attributes->all(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Apply access check service to the route and parameters in the request. Chris@0: * Chris@0: * @param \Symfony\Component\HttpFoundation\Request $request Chris@0: * The request to access check. Chris@0: */ Chris@0: protected function checkAccess(Request $request) { Chris@0: // The cacheability (if any) of this request's access check result must be Chris@0: // applied to the response. Chris@0: $access_result = $this->accessManager->checkRequest($request, $this->account, TRUE); Chris@0: // Allow a master request to set the access result for a subrequest: if an Chris@0: // access result attribute is already set, don't overwrite it. Chris@0: if (!$request->attributes->has(AccessAwareRouterInterface::ACCESS_RESULT)) { Chris@0: $request->attributes->set(AccessAwareRouterInterface::ACCESS_RESULT, $access_result); Chris@0: } Chris@0: if (!$access_result->isAllowed()) { Chris@17: if ($access_result instanceof CacheableDependencyInterface && $request->isMethodCacheable()) { Chris@17: throw new CacheableAccessDeniedHttpException($access_result, $access_result instanceof AccessResultReasonInterface ? $access_result->getReason() : NULL); Chris@17: } Chris@17: else { Chris@17: throw new AccessDeniedHttpException($access_result instanceof AccessResultReasonInterface ? $access_result->getReason() : NULL); Chris@17: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRouteCollection() { Chris@0: if ($this->router instanceof RouterInterface) { Chris@0: return $this->router->getRouteCollection(); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) { Chris@0: if ($this->router instanceof UrlGeneratorInterface) { Chris@0: return $this->router->generate($name, $parameters, $referenceType); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException Chris@0: * Thrown when access checking failed. Chris@0: */ Chris@0: public function match($pathinfo) { Chris@0: return $this->matchRequest(Request::create($pathinfo)); Chris@0: } Chris@0: Chris@0: }