public function invokeHandlers($pathInfo, Uri $baseUri, HttpRequest $request) { if ($request->isOptions()) { $response = new HttpResponse(Http::CODE_NO_CONTENT); $response->setHeader('MS-Author-Via', 'DAV'); try { $event = new PopulateOptionsEvent($this->storage->findResource($pathInfo)); } catch (\OutOfBoundsException $e) { return new HttpResponse(WebDav::CODE_NOT_FOUND); } $this->dispatcher->notify($event); $response->setHeader('DAV', implode(', ', $event->features)); $response->setHeader('Allow', implode(', ', $event->allow)); $response->setHeader('Cache-Control', 'no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0'); return $response; } foreach ($this->handlers as $handler) { try { $response = $handler->handle($pathInfo, $baseUri, $request, $this->storage); } catch (MethodNotAllowedException $e) { break; } catch (\OutOfBoundsException $e) { return new HttpResponse(WebDav::CODE_NOT_FOUND); } if ($response !== NULL) { if (!$response->hasHeader('Cache-Control')) { $response->setHeader('Cache-Control', 'no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0'); } return $response; } } try { $resource = $this->storage->findResource($pathInfo); } catch (\OutOfBoundsException $e) { return new HttpResponse(WebDav::CODE_NOT_FOUND); } $event = new PopulateOptionsEvent($resource); $this->dispatcher->notify($event); $response = new HttpResponse(Http::CODE_METHOD_NOT_ALLOWED); $response->setHeader('MS-Author-Via', 'DAV'); $response->setHeader('DAV', implode(', ', $event->features)); $response->setHeader('Allow', implode(', ', $event->allow)); $response->setHeader('Cache-Control', 'no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0'); return $response; }