2012-09-22 17 views
5

Al configurar ZF2 + ODM, estoy recibiendo el siguiente error:Zend Framework 2 + Doctrine ODM, "¿No se encontró la clase en el espacio de espacios configurado de la cadena"?

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

La configuración actual es la siguiente:

ZF2 estable, doctrina instalado ODM a través de composer.phar con el contenido del compositor .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" 
    } 
} 

módulos cargados

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

hidratante y proxy de directorios se crean

$ 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 configuración del ODM parece

'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' 
     ) 
    ) 
), 

Estoy intentando utilizar el siguiente mapeo

<?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; 
    } 

} 

pero llamándolo a través

<?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(); 
    } 
} 

Cualquier po Inters?

+0

no creo que la respuesta proporcionada es correcta. ¿Alguien más tiene alguna idea sobre cuál podría ser el problema? – Sam152

Respuesta

0

se enteraron del problema ...

Config archivo module.doctrine-mongo-odm.local.php no estaba bajo el directorio de carga automática ...

+0

¿Estás seguro de que esa era realmente la solución? Tengo el mismo problema al usar DoctrineORMModule. Intenté poner la matriz de configuración de doctrina a nivel global y hacer que me llamaran desde el nivel del módulo y siempre obtengo el mismo error. –

3

solución real no es la adición de module.doctrine-mongo -odm.local.php en el directorio de carga automática, estas líneas trabajaron para mí como la configuración

'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

Esta instalación funciona bien con las versiones actuales: ZF2, MongoDB, and Doctrine installation

Copie el archivo de configuración predeterminado de odm a nuestro directorio config. Luego deberá modificar el module.doctrine-mongo-odm.local.php en cuanto a las especificaciones de su servidor. Este es el archivo de configuración donde configura los hosts de su servidor, puertos, nombre de usuario y contraseñas. Por ejemplo, asumiremos que todo se está ejecutando en la misma máquina local y no haremos modificaciones.

Ésta es una aplicación module.config.php que trabajará para una solución híbrida 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' 
      ) 
     )     
    ) 
) 
Cuestiones relacionadas