/** * Core controller handler. * * @param FilterControllerEvent $event * * @throws \InvalidArgumentException */ public function paramFetcherOnKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); if (!$request->attributes->get(FOSRestBundle::ZONE_ATTRIBUTE, true)) { return; } $controller = $event->getController(); if (is_callable($controller) && method_exists($controller, '__invoke')) { $controller = [$controller, '__invoke']; } $this->paramFetcher->setController($controller); $attributeName = $this->getAttributeName($controller); $request->attributes->set($attributeName, $this->paramFetcher); if ($this->setParamsAsAttributes) { $params = $this->paramFetcher->all(); foreach ($params as $name => $param) { if ($request->attributes->has($name) && null !== $request->attributes->get($name)) { $msg = sprintf("ParamFetcher parameter conflicts with a path parameter '{$name}' for route '%s'", $request->attributes->get('_route')); throw new \InvalidArgumentException($msg); } $request->attributes->set($name, $param); } } }