On 6 October 2011 15:37, Andrew Mason <[email protected]> wrote:
> Hello all,
> I am trying to use the wonderful SabreDAV library to create a webdav
> share. I have a demo up and running however the framework / class i'm
> using is namespaced, and SabreDAV unfortunately does not have a 5.3
> style namespace declaration.
>
> I have an spl_autoload function registered in my base controller and
> so long as I prefix the classname with a \ it all works:
>
>
> $rootDirectory = new \Sabre_DAV_FS_Directory($rootDir);
>
> // The server object is responsible for making sense out of the WebDAV
> protocol
> $server = new \Sabre_DAV_Server($rootDirectory);
>
>
> However, SabreDAV it's self has a large amount of other PHP classes
> which it calls which obviously aren't prefixed with '\'
>
> Is there a way i can tell PHP any class name that get's instanciated
> with 'Sabre_' should resolve to '\Sabre' ?
>
> Many thanks
> Andrew
I've just downloaded SabreDav 1.5.3
Put Sabre directory in my include path.
And using the following code, ...
<?php
namespace GoingToBeUsingSabre;
require_once 'Sabre/autoload.php';
var_dump(new \Sabre_DAV_FS_Directory('D:/'));
print_r(array_filter(get_declared_classes(), function($class){ return
'Sabre_' === substr($class, 0, 6);}));
print_r(get_included_files());
?>
outputs ...
object(Sabre_DAV_FS_Directory)#1 (1) {
["path":protected]=>
string(3) "D:/"
}
Array
(
[166] => Sabre_DAV_FS_Node
[167] => Sabre_DAV_FS_Directory
)
Array
(
[0] => Z:\UsingSabre.php
[1] => D:\PHP\Includes\Sabre\autoload.php
[2] => D:\PHP\Includes\Sabre\DAV\FS\Directory.php
[3] => D:\PHP\Includes\Sabre\DAV\FS\Node.php
[4] => D:\PHP\Includes\Sabre\DAV\INode.php
[5] => D:\PHP\Includes\Sabre\DAV\ICollection.php
[6] => D:\PHP\Includes\Sabre\DAV\IQuota.php
)
They provide their own autoloader. As you can see, I've included their
autoloader and made 1 call to a root namespaced class. The registered
autoloader took care of the rest and loaded the additional classes as
needed.
Take a look at the Zend Framework's autoloader
(http://framework.zend.com/manual/en/zend.loader.autoloader.html)
Here is the same working example, but using ZF's autoloader ...
<?php
namespace GoingToBeUsingSabre;
require_once 'Zend/Loader/Autoloader.php';
$o_ZendLoaderAutoLoader = \Zend_Loader_Autoloader::getInstance();
$o_ZendLoaderAutoLoader->registerNamespace('Sabre_');
var_dump(new \Sabre_DAV_FS_Directory('D:/'));
print_r(array_filter(get_declared_classes(), function($class){ return
'Sabre_' === substr($class, 0, 6);}));
print_r(get_included_files());
?>
output now is ...
object(Sabre_DAV_FS_Directory)#2 (1) {
["path":protected]=>
string(3) "D:/"
}
Array
(
[168] => Sabre_DAV_FS_Node
[169] => Sabre_DAV_FS_Directory
)
Array
(
[0] => Z:\UsingSabre.php
[1] => D:\PHP\Includes\Zend\Loader\Autoloader.php
[2] => D:\PHP\Includes\Zend\Loader.php
[3] => D:\PHP\Includes\Sabre\DAV\FS\Directory.php
[4] => D:\PHP\Includes\Sabre\DAV\FS\Node.php
[5] => D:\PHP\Includes\Sabre\DAV\INode.php
[6] => D:\PHP\Includes\Sabre\DAV\ICollection.php
[7] => D:\PHP\Includes\Sabre\DAV\IQuota.php
)
Regards,
Richard.
--
Richard Quadling
Twitter : EE : Zend : PHPDoc
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY : bit.ly/lFnVea
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php