2012-01-25 51 views
1

我尝试将mongoDB与Zend Framework和Doctrine集成。 迄今为止整合效果很好。 我唯一的问题是,我的实体没有找到(对应于我得到的错误消息)。ZendFramework&Doctrine 2&MongoDb - 实体未找到

的错误是:

Warning: class_parents() [function.class-parents]: Class User does not exist and could not be loaded in /Applications/XAMPP/xamppfiles/htdocs/project/library/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php on line 336 
Warning: array_reverse() expects parameter 1 to be array, boolean given in /Applications/XAMPP/xamppfiles/htdocs/project/library/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php on line 336 
Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/project/library/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php on line 336 
Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /Applications/XAMPP/xamppfiles/htdocs/project/library/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php, line 336' in /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Controller/Response/Abstract.php:323 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Controller/Response/Abstract.php(341): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Controller/Response/Abstract.php(768): Zend_Controller_Response_Abstract->sendHeaders() #2 /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Controller/Front.php(992): Zend_Controller_Response_Abstract->sendResponse() #3 /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #4 /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Application.php(366): Zend_Applic in /Applications/XAMPP/xamppfiles/htdocs/project/library/Zend/Controller/Response/Abstract.php on line 323 

我的application.ini:

[production] 
; PHP settings 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 

; Set Plugin path for Lupi mongoodm resource 
pluginPaths.Lupi_Resource = APPLICATION_PATH "/../Library/Lupi/Resource" 

; Library include paths & namespaces 
includePaths.library = APPLICATION_PATH "/../library" 
autoloaderNamespaces[] = "Lupi\" 
autoloaderNamespaces[] = "Doctrine\" 
autoloaderNamespaces[] = "Symfony\" 

; Bootstrap options 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 

; Applicaiton Setup 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 

; ODM settings 
resources.odm.documents.dir = APPLICATION_PATH "/models/Entities" 
resources.odm.documents.namespace = "Application" 
resources.odm.config.proxyDir = APPLICATION_PATH "/models/Proxies" 
resources.odm.config.proxyNamespace = "proxies" 
resources.odm.config.hydratorDir = APPLICATION_PATH "/models/Hydrators" 
resources.odm.config.hydratorNamespace = "hydrators" 


[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

我bootstrap.php中是空的。 此外,我有github上的示例操作控制器和资源。

我user.php的:

<?php 

namespace Entities; 

/** 
    * @Document(collection="users") 
    */ 
    class User { 

    /** 
    * @Id 
    */ 
    private $id; 

/** 
* @String 
*/ 
private $username; 

/** 
* @String 
*/ 
    private $email; 

我的控制器:

<?php 

class RegistrationController extends Lupi\Controller\Action { 

    /** 
    * @var \Doctrine\ODM\MongoDB\DocumentRepository 
    */ 
    protected $repository; 

public function init() { 
    $this->repository = $this->dm->getRepository('User'); 
} 

我的例子,在此基础上在这里:http://github.com/bittarman/zf-d2-odm,演示文稿,这可以在这里找到http://www.zend.com/en/webinar/Framework/70170000000bZ6y-Doctrine2-ODM-ZF-20110526.flv,而且在SlideShare上与相应的标签。

在此先感谢您的帮助! =)

回答

1

你会看到,在配置的上面两行:

resources.odm.documents.dir = APPLICATION_PATH “/模型/实体” resources.odm.documents.namespace =“应用“

它正在寻找与命名空间的文件(实体)‘的文件夹应用程序/模型/实体应用程序’(你似乎已经编辑为我小写实体E)

您的命名空间似乎是实体,这意味着它正在寻找错误的名称空间。 或者, a)更改您的文档以适应配置,所以Application \ User将位于application/models/Entities/Application/User.php或... b)更改配置以适合您的文档,所以'resources .odm.documents.namespace =“应用程序”将变为'resources.odm.documents.namespace =“Entites”'。

感谢您花时间观看我的网络研讨会,并下载该项目,但希望您能发现它的内容丰富!

+0

首先感谢您的回复!你提到的东西对我来说似乎是正确和合理的,我根据你的描述对它们进行了改变,但是没有改变:(之后,我将1:1从你的项目拷贝到我的项目中(也包括它的类的实体文件夹),而且我有这个错误我真的不明白:( – pvlsgnnks