ZendFramework&学说2& MongoDb - 未找到实体

时间:2012-01-25 17:01:37

标签: zend-framework mongodb doctrine-orm

我尝试将mongoDB与Zend Framework和Doctrine集成。 到目前为止整合工作良好。 我唯一的问题是,我的实体没有被找到(对应于我得到的错误信息)。

错误是:

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上有Action Controller和Example中的Resource。

我的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找到,也可以在带有相应标签的slidehare上找到。

提前感谢您的帮助! =)

1 个答案:

答案 0 :(得分:1)

您将在上面的两行配置中看到:

  

resources.odm.documents.dir = APPLICATION_PATH“/ models / Entities”   resources.odm.documents.namespace =“应用程序”

它正在文件夹application / models / Entities中查找名称空间为“Application”的文档(实体)(您似乎已将其编辑为我将实体的e降低)

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

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