Chris@0: routeProvider = $route_provider; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tries to handle the options request. Chris@0: * Chris@0: * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event Chris@0: * The request event. Chris@0: */ Chris@0: public function onRequest(GetResponseEvent $event) { Chris@0: if ($event->getRequest()->isMethod('OPTIONS')) { Chris@0: $routes = $this->routeProvider->getRouteCollectionForRequest($event->getRequest()); Chris@0: // In case we don't have any routes, a 403 should be thrown by the normal Chris@0: // request handling. Chris@0: if (count($routes) > 0) { Chris@0: $methods = array_map(function (Route $route) { Chris@0: return $route->getMethods(); Chris@0: }, $routes->all()); Chris@0: // Flatten and unique the available methods. Chris@0: $methods = array_unique(call_user_func_array('array_merge', $methods)); Chris@0: $response = new Response('', 200, ['Allow' => implode(', ', $methods)]); Chris@0: $event->setResponse($response); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function getSubscribedEvents() { Chris@0: // Set a high priority so it is executed before routing. Chris@0: $events[KernelEvents::REQUEST][] = ['onRequest', 1000]; Chris@0: return $events; Chris@0: } Chris@0: Chris@0: }