public function createCollection($uri, MkCol $mkCol)
    {
        list($parentUri, $newName) = Uri\split($uri);

        // Making sure the parent exists
        try {
            $parent = $this->tree->getNodeForPath($parentUri);
        } catch (Exception\NotFound $e) {
            throw new Exception\Conflict('Parent node does not exist');
        }

        // Making sure the parent is a collection
        if (!$parent instanceof ICollection) {
            throw new Exception\Conflict('Parent node is not a collection');
        }

        // Making sure the child does not already exist
        try {
            $parent->getChild($newName);

            // If we got here.. it means there's already a node on that url, and we need to throw a 405
            throw new Exception\MethodNotAllowed('The resource you tried to create already exists');
        } catch (Exception\NotFound $e) {
            // NotFound is the expected behavior.
        }

        if (!$this->emit('beforeBind', [$uri])) {
            return;
        }

        if ($parent instanceof IExtendedCollection) {
            /*
             * If the parent is an instance of IExtendedCollection, it means that
             * we can pass the MkCol object directly as it may be able to store
             * properties immediately.
             */
            $parent->createExtendedCollection($newName, $mkCol);
        } else {
            /*
             * If the parent is a standard ICollection, it means only
             * 'standard' collections can be created, so we should fail any
             * MKCOL operation that carries extra resourcetypes.
             */
            if (count($mkCol->getResourceType()) > 1) {
                throw new Exception\InvalidResourceType('The {DAV:}resourcetype you specified is not supported here.');
            }

            $parent->createDirectory($newName);
        }

        // If there are any properties that have not been handled/stored,
        // we ask the 'propPatch' event to handle them. This will allow for
        // example the propertyStorage system to store properties upon MKCOL.
        if ($mkCol->getRemainingMutations()) {
            $this->emit('propPatch', [$uri, $mkCol]);
        }
        $success = $mkCol->commit();

        if (!$success) {
            $result = $mkCol->getResult();

            $formattedResult = [
                'href' => $uri,
            ];

            foreach ($result as $propertyName => $status) {
                if (!isset($formattedResult[$status])) {
                    $formattedResult[$status] = [];
                }
                $formattedResult[$status][$propertyName] = null;
            }

            return $formattedResult;
        }

        $this->tree->markDirty($parentUri);
        $this->emit('afterBind', [$uri]);
    }
public function createCollection($uri, MkCol $mkCol)
    {
        list($parentUri, $newName) = Uri\split($uri);

        // Making sure the parent exists
        try {
            $parent = $this->tree->getNodeForPath($parentUri);
        } catch (Exception\NotFound $e) {
            throw new Exception\Conflict('Parent node does not exist');
        }

        // Making sure the parent is a collection
        if (!$parent instanceof ICollection) {
            throw new Exception\Conflict('Parent node is not a collection');
        }

        // Making sure the child does not already exist
        try {
            $parent->getChild($newName);

            // If we got here.. it means there's already a node on that url, and we need to throw a 405
            throw new Exception\MethodNotAllowed('The resource you tried to create already exists');
        } catch (Exception\NotFound $e) {
            // NotFound is the expected behavior.
        }

        if (!$this->emit('beforeBind', [$uri])) {
            return;
        }

        if ($parent instanceof IExtendedCollection) {
            /*
             * If the parent is an instance of IExtendedCollection, it means that
             * we can pass the MkCol object directly as it may be able to store
             * properties immediately.
             */
            $parent->createExtendedCollection($newName, $mkCol);
        } else {
            /*
             * If the parent is a standard ICollection, it means only
             * 'standard' collections can be created, so we should fail any
             * MKCOL operation that carries extra resourcetypes.
             */
            if (count($mkCol->getResourceType()) > 1) {
                throw new Exception\InvalidResourceType('The {DAV:}resourcetype you specified is not supported here.');
            }

            $parent->createDirectory($newName);
        }

        // If there are any properties that have not been handled/stored,
        // we ask the 'propPatch' event to handle them. This will allow for
        // example the propertyStorage system to store properties upon MKCOL.
        if ($mkCol->getRemainingMutations()) {
            $this->emit('propPatch', [$uri, $mkCol]);
        }
        $success = $mkCol->commit();

        if (!$success) {
            $result = $mkCol->getResult();

            $formattedResult = [
                'href' => $uri,
            ];

            foreach ($result as $propertyName => $status) {
                if (!isset($formattedResult[$status])) {
                    $formattedResult[$status] = [];
                }
                $formattedResult[$status][$propertyName] = null;
            }

            return $formattedResult;
        }

        $this->tree->markDirty($parentUri);
        $this->emit('afterBind', [$uri]);
    }
public function createCollection ( $ uri , MkCol $ mkCol ) { list ( $ parentUri , $ newName ) = Uri \ split ( $ uri ) ; // Making sure the parent exists try { $ parent = $ this -> tree -> getNodeForPath ( $ parentUri ) ; } catch ( Exception \ NotFound $ e ) { throw new Exception \ Conflict ( 'Parent node does not exist' ) ; } // Making sure the parent is a collection if ( ! $ parent instanceof ICollection ) { throw new Exception \ Conflict ( 'Parent node is not a collection' ) ; } // Making sure the child does not already exist try { $ parent -> getChild ( $ newName ) ; // If we got here.. it means there's already a node on that url, and we need to throw a 405 throw new Exception \ MethodNotAllowed ( 'The resource you tried to create already exists' ) ; } catch ( Exception \ NotFound $ e ) { // NotFound is the expected behavior. } if ( ! $ this -> emit ( 'beforeBind' , [ $ uri ] ) ) { return ; } if ( $ parent instanceof IExtendedCollection ) { /*
             * If the parent is an instance of IExtendedCollection, it means that
             * we can pass the MkCol object directly as it may be able to store
             * properties immediately.
             */ $ parent -> createExtendedCollection ( $ newName , $ mkCol ) ; } else { /*
             * If the parent is a standard ICollection, it means only
             * 'standard' collections can be created, so we should fail any
             * MKCOL operation that carries extra resourcetypes.
             */ if ( count ( $ mkCol -> getResourceType ( ) ) > 1 ) { throw new Exception \ InvalidResourceType ( 'The {DAV:}resourcetype you specified is not supported here.' ) ; } $ parent -> createDirectory ( $ newName ) ; } // If there are any properties that have not been handled/stored, // we ask the 'propPatch' event to handle them. This will allow for // example the propertyStorage system to store properties upon MKCOL. if ( $ mkCol -> getRemainingMutations ( ) ) { $ this -> emit ( 'propPatch' , [ $ uri , $ mkCol ] ) ; } $ success = $ mkCol -> commit ( ) ; if ( ! $ success ) { $ result = $ mkCol -> getResult ( ) ; $ formattedResult = [ 'href' => $ uri , ] ; foreach ( $ result as $ propertyName => $ status ) { if ( ! isset ( $ formattedResult [ $ status ] ) ) { $ formattedResult [ $ status ] = [ ] ; } $ formattedResult [ $ status ] [ $ propertyName ] = null ; } return $ formattedResult ; } $ this -> tree -> markDirty ( $ parentUri ) ; $ this -> emit ( 'afterBind' , [ $ uri ] ) ; }
Use this method to create a new collection.

@param string $uri   The new uri
@param MkCol  $mkCol

@return array|null
Use this method to create a new collection .