2013-09-07 4 views
0

Я видел ту же самую ошибку, часто размещенную здесь, и прочитал и внесли изменения, основанные на предыдущих вопросах и ответах, безрезультатно.ZF2 - Doctrine2 MongoDB ODM - «Класс не был найден в пространствах имен конфигурации цепей»

Я установил Doctrine в Монго ODM с Zend Framework с помощью Composer и завершить установку, как описано здесь

https://github.com/doctrine/DoctrineMongoODMModule

Я изменил мой /config/autoload/module.doctrine-mongo-odm.local. файл, за рекомендации вышеуказанной документации в попытке исправить мою проблему и на основе ответов на подобные вопросы здесь, так что он теперь выглядит следующим образом

<?php 
return array(
    'doctrine' => array(

     'connection' => array(
      'odm_default' => array(
       'server' => 'removed.mongolab.com', 
       'port'  => '43957', 
       'user'  => 'removed', 
       'password' => 'removed', 
       'dbname' => 'richard', 
       'options' => array() 
      ), 
     ), 

     'configuration' => array(
      'odm_default' => array(
       'metadata_cache'  => 'array', 
       'driver'    => 'odm_default', 
       'generate_proxies' => true, 
       'proxy_dir'   => 'data/DoctrineMongoODMModule/Proxy', 
       'proxy_namespace' => 'DoctrineMongoODMModule\Proxy', 
       'generate_hydrators' => true, 
       'hydrator_dir'  => 'data/DoctrineMongoODMModule/Hydrator', 
       'hydrator_namespace' => 'DoctrineMongoODMModule\Hydrator', 
       'default_db'   => 'richard', 
       'filters'   => array(), 
       'logger'    => null 
      ) 
     ), 

     'odm_default' => array(
      'drivers' => array(
       'Application\Document' => 'odm_driver' 
      ) 
     ), 

     'odm_driver' => array(
      'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => array(
       'module/Application/src/Application/Document' 
      ), 
     ), 

     'documentmanager' => array(
      'odm_default' => array(
       'connection' => 'odm_default', 
       'configuration' => 'odm_default', 
       'eventmanager' => 'odm_default' 
      ) 
     ), 

     'eventmanager' => array(
      'odm_default' => array(
       'subscribers' => array() 
      ) 
     ), 
    ), 
); 

у меня есть файл/модуль/аппликаций п/SRC/Application/Документ/User.php следующего

<?php 

namespace Application\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations; 

class User { 

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

    /** @ODM\Field(type="bin_data_timestamp") */ 
    private $timestamp; 

    /** @ODM\Field(type="string") */ 
    private $username; 

    /** @ODM\Field(type="bin_data_md5") */ 
    private $password; 

    /** @ODM\Field(type="bin_data_uuid") */ 
    private $salt; 

    /** @ODM\Field(type="string") */ 
    private $realName; 

    /** @ODM\Field(type="string") */ 
    private $email; 

    public function getId() { 

     return $this->id; 

    } 

    // ... 

    public function setId($id) { 

     $this->id = $id; 

    } 

    // ... 

} 

В моем контроллере, я использую следующий код.

$dm = $this->getServiceLocator()->get('doctrine.documentmanager.odm_default'); 
$user = new User; 

$user->setUsername("test"); 

$dm->persist($user); 
$dm->flush(); 

Однако я получаю позорный ошибку

The class 'Application\Document\User' was not found in the chain configured namespaces 

Любая помощь будет принята с благодарностью.

+0

возможно дубликат [Zend Framework 2 + доктрина ODM, "Класс не был найден в цепи сконфигурировано пространств имен" ошибка?] (Http://stackoverflow.com/questions/12540224/zend-framework-2 -doctrine-ОДМ-The-класс был, не обретенная-в-цепи конфигурируемый) – Maks3w

ответ

1

Моя конфигурация немного запуталась, как выясняется. Я смог исправить проблему с помощью следующего кода конфигурации.

'driver' => array(
     'odm_driver' => array(
      'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver', 
      'paths' => array(__DIR__ . '/../../module/Application/src/Application/Document') 
     ), 
     'odm_default' => array(
      'drivers' => array(
       'Application\Document' => 'odm_driver' 
      ) 
     ), 
    ), 

NB: Входящий в комплект код для приложения \ Документ \ Пользователь также производит ошибки, исправленные следующим кодом.

namespace Application\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM; 

/** @ODM\Document */ 
class User { 

    // ... 

}