2011-05-18 155 views
0

我试图自动加载一些来自Doctrine MongoDB实现的文档,但我不知道如何。根据该网站的说法,资源自动加载器将其视为假定您的名称空间将使用下划线(_)而不是新名称空间。使用PHP 5.3命名空间的Zend资源自动加载

当我想运行此行的例子:无需使用需要

if(!$this->dm->getRepository('Documents\User')->findOneBy(array('email'=>$userInfo['email']))){ 
     $user = new User(); 
//... 

。然而,现在当我尝试在bootstrap中使用资源加载器时,它告诉我它无法加载php文件。

存储库是存储库\用户命名空间和用户()是在文献\用户命名空间。

这是我的引导

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH.'/models/documents/', 
'namespace' => 'Documents', 

));

有没有办法做到这一点,还是我停留在我的模型中使用require_once?

感谢,

-Zend菜鸟

回答

1

在Zend autloader是不会削减它的命名空间5.3代码。

最简单的事情是推动学说的类加载器到了Zend之一。

使用这样的事情在你的引导,而不是上面的代码。在这个例子中,我假设DocumentRepository文件夹中APPLICATION_PATH . '/models'

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 

    require_once 'Doctrine/Common/ClassLoader.php'; 

    $documentAutoloader = new \Doctrine\Common\ClassLoader('Document', APPLICATION_PATH . '/models'); 
    $autoloader->pushAutoloader(array($documentAutoloader, 'loadClass'), 'Document'); 

    $repositoryAutoloader = new \Doctrine\Common\ClassLoader('Repository', APPLICATION_PATH . '/models'); 
    $autoloader->pushAutoloader(array($repositoryAutoloader, 'loadClass'), 'Repository'); 

    return $autoloader; 
} 
+0

aweeesome。我会尝试,当我今天下车,但看起来正是我一直在寻找。 – 2011-05-18 16:52:54

4

你可以使用马修纬二路O'Phinneys Backported ZF2 Autoloaders

特点

  • PSR-0兼容include_path自动加载
  • PSR-0兼容每个前缀或命名空间的自动加载
  • 类映射自动加载,包括类映射生成
  • 自动装载机工厂用于一次

加载多个自动加载机的策略实施例

protected function _initAutoloader() 
{ 
    require_once 'path/to/library/ZendX/Loader/StandardAutoloader.php'; 
    $loader = new ZendX_Loader_StandardAutoloader(array(
     'namespaces' => array(
      'Repository' => APPLICATION_PATH . '/models/', 
      'Document' => APPLICATION_PATH . '/models/', 
     ), 
    )); 
    $loader->register(); // register with spl_autoload_register() 
}