public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage) { if ($request->getMethod() != WebDav::METHOD_MKCOL) { return; } try { $storage->findResource($path); // Collection is already mapped... throw new MethodNotAllowedException(); } catch (\OutOfBoundsException $e) { } $parts = explode('/', $path); $name = array_pop($parts); try { $parent = $storage->findResource(implode('/', $parts)); } catch (\OutOfBoundsException $e) { throw new WebDavException(WebDav::CODE_CONFLICT); } $proppatch = $this->parseBody($request); $storage->beginTransaction(); try { $resource = $storage->createCollection($parent, $name); $success = true; if ($proppatch !== NULL) { $proppatch->applyOperations($resource); } } catch (\Exception $e) { $storage->rollBack(); throw $e; } $storage->commit(); if ($success) { return new HttpResponse(WebDav::CODE_CREATED); } $builder = new MakeCollectionResponseBuilder($proppatch); return $builder->buildResponse(WebDav::CODE_FORBIDDEN); }