我正在尝试从Doctrine MongoDB实现中自动加载一些文档,但我不确定如何。据该网站称,资源自动加载器认为你的命名空间将使用下划线(_)而不是新的命名空间。
作为一个例子,我想运行这一行:
if(!$this->dm->getRepository('Documents\User')->findOneBy(array('email'=>$userInfo['email']))){
$user = new User();
//...
无需使用require。但是,现在当我尝试在bootstrap中使用资源加载器时,它告诉我它无法加载php文件。
存储库是Repository \ User命名空间,User()位于Document \ User命名空间中。
这是我的引导程序
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH.'/models/documents/',
'namespace' => 'Documents',
));
有没有办法做到这一点,还是我在模特中使用require_once?
谢谢,
-Zend Noob
答案 0 :(得分:4)
你可以使用Matthew Weier O'Phinneys Backported ZF2 Autoloaders
功能
include_path
自动加载示例强>
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()
}
答案 1 :(得分:1)
Zend自动加载器不会为5.3命名空间代码剪切它。
最简单的方法是将Doctrine的类加载器推入Zend版本。
在Bootstrap中使用类似的内容而不是上面的代码。在此示例中,我假设Document
和Repository
文件夹位于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;
}