Пример #1
0
 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;
 }