2012-09-22 15 views
5

Quando si imposta ZF2 + ODM, sto ottenendo il seguente errore:Zend Framework 2 + Doctrine ODM, errore "La classe non è stata trovata negli spazi dei nomi configurati della catena"?

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

La configurazione attuale è come il seguente:

ZF2 stabile, dottrina installato ODM via composer.phar con i contenuti del compositore .json

{ 
    "name": "zendframework/skeleton-application", 
    "description": "Skeleton Application for ZF2", 
    "license": "BSD-3-Clause", 
    "keywords": [ 
     "framework", 
     "zf2" 
    ], 
    "homepage": "http://framework.zend.com/", 
    "minimum-stability": "dev", 
    "require": { 
     "php": ">=5.3.3", 
     "zendframework/zendframework": "2.0.0", 
     "doctrine/doctrine-mongo-odm-module": "dev-master" 
    } 
} 

moduli caricati

'modules' => array(
    'Application', 
    'DoctrineModule', 
    'DoctrineMongoODMModule', 
), 

Hydrator e proxy dirs sono creati

$ ls -l data/DoctrineMongoODMModule/ 
total 0 
drwxrwxrwx 2 wisu staff 68 Sep 12 08:34 Hydrators 
drwxrwxrwx 2 wisu staff 68 Sep 12 08:35 Proxy 

la configurazione del ODM sembra

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

Sto cercando di utilizzare il seguente mappatura

<?php 

namespace Application\Document; 

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

/** @ODM\Document(collection="user") */ 
class User 
{ 
    /** @ODM\Id */ 
    private $id; 

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

    /** 
    * @return the $id 
    */ 
    public function getId() { 
     return $this->id; 
    } 

    /** 
    * @return the $name 
    */ 
    public function getName() { 
     return $this->name; 
    } 

    /** 
    * @param field_type $id 
    */ 
    public function setId($id) { 
     $this->id = $id; 
    } 

    /** 
    * @param field_type $name 
    */ 
    public function setName($name) { 
     $this->name = $name; 
    } 

} 

ma chiamandolo tramite

<?php 

namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use Application\Document\User; 

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 

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

     $user = new User(); 
     $user->setName("Gembul"); 

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

     return new ViewModel(); 
    } 
} 

Qualsiasi po intermedie?

+0

non credo la risposta fornita è corretta. Qualcun altro ha qualche idea su quale potrebbe essere il problema? – Sam152

risposta

0

scoperto il problema ...

Config file di module.doctrine-mongo-odm.local.php non era sotto directory autoload ...

+0

Sei sicuro che sia stata effettivamente la soluzione? Ho lo stesso problema con DoctrineORMModule. Ho provato a mettere l'array di dottrine config a livello globale e ad averlo chiamato dal livello di modulo e ottengo sempre lo stesso errore. –

3

soluzione reale non aggiunge module.doctrine-mongo -odm.local.php nella directory caricamento automatico, queste linee hanno lavorato per me, come la configurazione

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

Questa installazione funziona bene con le versioni attuali: ZF2, MongoDB, and Doctrine installation

Copia il file di configurazione predefinito di odm nella nostra directory di configurazione. Sarà quindi necessario modificare il modulo.doctrine-mongo-odm.local.php in base alle specifiche del server. Questo è il file di configurazione in cui si impostano gli host del server, le porte, il nome utente e le password. Ad esempio, supponiamo che tutto stia girando sulla stessa macchina locale e non apporti alcuna modifica.

Si tratta di un'applicazione module.config.php che lavorerà per una soluzione ibrida ORM/ODM:

'doctrine' => array(
    'driver' => array(
     'orm_driver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity') 
     ), 
     'orm_default' => array(
      'drivers' => array(
       __NAMESPACE__ . '\Entity' => 'orm_driver' 
      ) 
     ), 
     'odm_driver' => array(
      'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',   
      'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Document') 
     ), 
     'odm_default' => array(
      'drivers' => array(
       __NAMESPACE__ . '\Document' => 'odm_driver' 
      ) 
     )     
    ) 
)