Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Imposible de montar doctrine2 + php

Estas en el tema de Imposible de montar doctrine2 + php en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola estoy teniendo problemas para llegar a configurar Doctrine2. HE trabajado con doctirne1 y necesito generar las clases desde una base de datos ya existente, ...
  #1 (permalink)  
Antiguo 13/01/2013, 18:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Imposible de montar doctrine2 + php

Hola estoy teniendo problemas para llegar a configurar Doctrine2. HE trabajado con doctirne1 y necesito generar las clases desde una base de datos ya existente, pero a la hora de trabajar con dichas entidades/clases no puedo ya que me da errores.

Por favor si pueden ayudarme, ponganse conmigo en contacto por email o mensaje privado. Puedo remunerar su tiempo empleado en ayudarme si es necesario.

Muchas Gracias
  #2 (permalink)  
Antiguo 13/01/2013, 18:25
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 6 meses
Puntos: 461
Respuesta: Imposible de montar doctrine2 + php

el Reverse Engineering de doctrine tiene un 70 a 80% de efectividad pero coloca la duda a ver en que se te puede apoyar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 14/01/2013, 01:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

Tengo la siguiente estructura de carpetas.

index.php --> archivo en el raiz que conecta y prueba
lib/orm/ -->
--- doctrine.php --> donde he indicado que la conexión es cli-config.php
---cli.config
lib/orm/Entities --> Entidades
lib/orm/doctrine-orm --> aqui tengo los archivos de Doctrine2

el archivo cli-config.php es el siguiente: donde entrando por la URL y enviando el parametro Generar, me genera las clases. Pero no se si correctamente ya que no me pone el namspace. Creo que el fallo puede ser en este paso.

Código PHP:
<?php

use DoctrineORMToolsEntityGenerator;

//ini_set("display_errors", "On");
ini_set("display_errors""1");

// this is not necessary if you use Doctrine2 with PEAR
$libPath __DIR__ '/doctrine-orm/';

// autoloaders
require_once 'Doctrine/Common/ClassLoader.php';

// (1) Autocargamos clases
$classLoader = new DoctrineCommonClassLoader('Doctrine'$libPath); // custom path
$classLoader->register();
$classLoader = new DoctrineCommonClassLoader('Entities'__DIR__ '/Entities');
$classLoader->register();
$classLoader = new DoctrineCommonClassLoader('Proxies'__DIR__ '/Proxies');
$classLoader->register();

// (2) Configuración
$config = new DoctrineORMConfiguration();

// (3) Caché
$config->setMetadataCacheImpl(new DoctrineCommonCacheArrayCache);

// (4) Driver
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(__DIR__ '/Entities'));
$config->setProxyNamespace('Proxies');

// (5) Proxies
$config->setProxyDir(__DIR__ '/Proxies');
$config->setProxyNamespace('Proxies');

// (6) Conexión
$connectionParams = array(
    
'dbname' => 'pruebas',
    
'user' => 'DESAS',
    
'password' => 'ebixa',
    
'host' => 'localhost',
    
'driver' => 'pdo_sqlsrv',
);

// (7) EntityManager
$em DoctrineORMEntityManager::create($connectionParams$config);

// (8) Código de prueba
//$user = new EntitiesUser();
//$address = new EntitiesAddress();

echo 'Hola mundo!' PHP_EOL;

if (isset(
$_GET["generar"])) {
    
//echo __DIR__ . '../model/entities';
// custom datatypes (not mapped for reverse engineering)
    
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('set''string');
    
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('enum''string');

// fetch metadata
    
$driver = new DoctrineORMMappingDriverDatabaseDriver(
                    
$em->getConnection()->getSchemaManager()
    );

    
$em->getConfiguration()->setMetadataDriverImpl($driver);
    
$cmf = new DoctrineORMToolsDisconnectedClassMetadataFactory();
    
$cmf->setEntityManager($em); // we must set the EntityManager

    
$classes $driver->getAllClassNames();
    
$metadata = array();
    foreach (
$classes as $class) {
        
//any unsupported table/schema could be handled here to exclude some classes
        
if (true) {
            
$metadata[] = $cmf->getMetadataFor($class);
        }
    }

    
$generator = new EntityGenerator();
    
$generator->setUpdateEntityIfExists(true); // only update if class already exists
    //$generator->setRegenerateEntityIfExists(true); // this will overwrite the existing classes
    
$generator->setGenerateStubMethods(false);
    
$generator->setGenerateAnnotations(true);
    
$generator->generate($metadata__DIR__ '/Entities');

    print 
'Done!';
}
?>
Ya finalmente intento hacer este código, para poder hacer una consulta como hacia con dictrine1, primero incluyo el codigo de cli_config.php para que me decuelva el $em.

Código PHP:
require_once 'lib/orm/cli-config3.php';
//$em = EntityManagerFactory::createEntityManager();

$huesped = new Huesped();
$huesped->setDocumento("1111111");
$huesped->setNombres("Juan");
$huesped->setApellidos("Perez");
$huesped->setTelefono("555555");

//$fecha = new DateTime();
//$huesped->setFechaNacimiento($fecha->createFromFormat("d/m/Y", "28/10/1986"));

//persistimos el objeto utilizando el método persist que proporciona el EntityManager
//, para un manejo correcto de errores, debemos utilizar un bloque try catch:
$em->persist($huesped);

//sincronizamos los datos entre la base de datos y el EntityManager.
$em->flush();

//una vez persistido el objeto huesped y sincronizados los datos, podemos conocer 
//el id que se asignó a dicho objeto, con tan solo hacer un llamado al método getId() 
//del objeto huesped.
try {
    
$em->persist($huesped);
    echo 
'Se persisti&oacute; el huesped ' $huesped->getNombres() . ' ' $huesped->getApellidos() . ' con ID ' $huesped->getId();

    echo 
'<strong>La tabla huesped contiene los siguientes datos</strong>';
    
$query $em->createQuery("SELECT h FROM entities\Huesped h");

    
print_r($query->getResult());
} catch (
Exception $exc) {
    echo 
$exc->getMessage();

Espero que me puedan ayudar
  #4 (permalink)  
Antiguo 14/01/2013, 09:30
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 9 meses
Puntos: 845
Respuesta: Imposible de montar doctrine2 + php

Primero, cual es el error ?, segundo, si no genera el NS tendrás que agregarlo de forma manual o crear un pequeño script que lo haga o bien si no te interesa el NS modificar el loader

Código PHP:
Ver original
  1. $classLoader = new Doctrine\Common\ClassLoader('', __DIR__ . '/Entities');

En relación a remunerar, te sugiero que postes en la sección adecuada del foro, Empleo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 14/01/2013 a las 16:24 Razón: fix NS
  #5 (permalink)  
Antiguo 14/01/2013, 15:17
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

GRacias, el problema que me dice es que no encuentra la clase
  #6 (permalink)  
Antiguo 14/01/2013, 16:23
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 9 meses
Puntos: 845
Respuesta: Imposible de montar doctrine2 + php

Es por el NS, intenta alguna de las soluciones que te comente en el post anterior.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 14/01/2013, 17:47
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

Hola masterpuppet. He intentado lo que me decias antes siguiendo el mismo esquema que antes puse al inicio del tema.

He intentado porner el namespace en la entidad y también me da el siguiente error:

Fatal error: Class 'Huesped' not found

posteo la clase que me ha generado el script inicial, por si sirve de ayuda.
Código PHP:
<?php

namespace entities
;

use 
DoctrineORMMapping as ORM;

/**
 * Huesped
 *
 * @ORM\Table(name="Huesped")
 * @ORM\Entity
 */
class Huesped
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string
     *
     * @ORM\Column(name="documento", type="string", length=10, nullable=false)
     */
    
private $documento;

    
/**
     * @var string
     *
     * @ORM\Column(name="nombres", type="string", length=50, nullable=false)
     */
    
private $nombres;

    
/**
     * @var string
     *
     * @ORM\Column(name="apellidos", type="string", length=50, nullable=false)
     */
    
private $apellidos;

    
/**
     * @var string
     *
     * @ORM\Column(name="telefono", type="string", length=10, nullable=false)
     */
    
private $telefono;


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

    
/**
     * Set documento
     *
     * @param string $documento
     * @return Huesped
     */
    
public function setDocumento($documento)
    {
        
$this->documento $documento;
    
        return 
$this;
    }

    
/**
     * Get documento
     *
     * @return string 
     */
    
public function getDocumento()
    {
        return 
$this->documento;
    }

    
/**
     * Set nombres
     *
     * @param string $nombres
     * @return Huesped
     */
    
public function setNombres($nombres)
    {
        
$this->nombres $nombres;
    
        return 
$this;
    }

    
/**
     * Get nombres
     *
     * @return string 
     */
    
public function getNombres()
    {
        return 
$this->nombres;
    }

    
/**
     * Set apellidos
     *
     * @param string $apellidos
     * @return Huesped
     */
    
public function setApellidos($apellidos)
    {
        
$this->apellidos $apellidos;
    
        return 
$this;
    }

    
/**
     * Get apellidos
     *
     * @return string 
     */
    
public function getApellidos()
    {
        return 
$this->apellidos;
    }

    
/**
     * Set telefono
     *
     * @param string $telefono
     * @return Huesped
     */
    
public function setTelefono($telefono)
    {
        
$this->telefono $telefono;
    
        return 
$this;
    }

    
/**
     * Get telefono
     *
     * @return string 
     */
    
public function getTelefono()
    {
        return 
$this->telefono;
    }
}
  #8 (permalink)  
Antiguo 14/01/2013, 18:08
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 9 meses
Puntos: 845
Respuesta: Imposible de montar doctrine2 + php

El NS es Entities capital E, luego para hacer uso de la clase tienes que importarla o bien utilizar el FQCN.

Código PHP:
Ver original
  1. use Entities\Huesped;
  2.  
  3. $huesped = new Huesped();

o

Código PHP:
Ver original
  1. $huesped = new \Entities\Huesped();
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 15/01/2013, 02:16
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

De nuvo mil gracias masterpuppet por estar ayudandome. Creo que va en buen camino. He hecho prueba como dices, y almenos encontrar la clase la encuentra ya,porque he editado los nombres de las clases y/o entidades y daba el error de not found.

Bien, te comento lo que he hecho y que me pasa ahora, que pienso que puede ser lo último. Mediante el script del principio del post, he generado las clases a partir de una base de datos ya creada, es sqlserver, ya que lo que estoy intentnado hacer es pasar una aplicacion de .net a php + doctrine.

Una vez generada estas clases, me ha generado la clase Huesped.php en la estructura de directorios que comenté al principio. No agrega el namespace y se lo pongo manualmente como comentas.

Código PHP:
<?php

namespace Entities
;

use 
DoctrineORMMapping as ORM;

/**
 * Huesped
 *
 * @ORM\Table(name="Huesped")
 * @ORM\Entity
 */
class Huesped
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string
     *
     * @ORM\Column(name="documento", type="string", length=10, nullable=false)
     */
    
private $documento;

    
/**
     * @var string
     *
     * @ORM\Column(name="nombres", type="string", length=50, nullable=false)
     */
    
private $nombres;

    
/**
     * @var string
     *
     * @ORM\Column(name="apellidos", type="string", length=50, nullable=false)
     */
    
private $apellidos;

    
/**
     * @var string
     *
     * @ORM\Column(name="telefono", type="string", length=10, nullable=false)
     */
    
private $telefono;


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

    
/**
     * Set documento
     *
     * @param string $documento
     * @return Huesped
     */
    
public function setDocumento($documento)
    {
        
$this->documento $documento;
    
        return 
$this;
    }

    
/**
     * Get documento
     *
     * @return string 
     */
    
public function getDocumento()
    {
        return 
$this->documento;
    }

    
/**
     * Set nombres
     *
     * @param string $nombres
     * @return Huesped
     */
    
public function setNombres($nombres)
    {
        
$this->nombres $nombres;
    
        return 
$this;
    }

    
/**
     * Get nombres
     *
     * @return string 
     */
    
public function getNombres()
    {
        return 
$this->nombres;
    }

    
/**
     * Set apellidos
     *
     * @param string $apellidos
     * @return Huesped
     */
    
public function setApellidos($apellidos)
    {
        
$this->apellidos $apellidos;
    
        return 
$this;
    }

    
/**
     * Get apellidos
     *
     * @return string 
     */
    
public function getApellidos()
    {
        return 
$this->apellidos;
    }

    
/**
     * Set telefono
     *
     * @param string $telefono
     * @return Huesped
     */
    
public function setTelefono($telefono)
    {
        
$this->telefono $telefono;
    
        return 
$this;
    }

    
/**
     * Get telefono
     *
     * @return string 
     */
    
public function getTelefono()
    {
        return 
$this->telefono;
    }
}
Por otro lado tengo un fichero con una función que me devuelve un entitymanager para operar con él.

Código PHP:
<?php

require_once __DIR__ '/doctrine-orm/Doctrine/Common/ClassLoader.php';

use 
DoctrineCommonClassLoader,
    
DoctrineORMConfiguration,
    
DoctrineORMEntityManager,
    
DoctrineCommonCacheApcCache;

/**
 * Description of EntityManagerFactory
 * @author Juan Carlos Perez Zapata
 * @version 0.1
 */
class EntityManagerFactory {

    
/**
     * @var Doctrine\ORM\EntityManager
     */
    
private static $em;

    
/**
     * 
     * @return Doctrine\ORM\EntityManager
     */
    
public static function createEntityManager() {

        if (
self::$em == null) {

            
//Paso 1: Cargamos las clases del namespace Doctrine
            
$classLoader = new DoctrineCommonClassLoader('Doctrine'__DIR__ '/doctrine-orm');
            
$classLoader->register();

            
// Paso 2: Cargamos las entidades            
            
$entitiesClassLoader = new ClassLoader('Entities'realpath("lib/model"));
            
$entitiesClassLoader->register();

            
//Paso 3: Cargamos las clases que sirven de proxies
            
$proxiesClassLoader = new ClassLoader('proxies'realpath("lib/model"));
            
$proxiesClassLoader->register();

            
//Paso 4: Configuracion de la caché
            
$config = new Configuration();
            
$config->setMetadataCacheImpl(new DoctrineCommonCacheArrayCache());

            
//Paso 5: Configuracion de los metadatos de la entidades
            
$driverImpl $config->newDefaultAnnotationDriver(array(__DIR__ "/../model/entities"));
            
$config->setMetadataDriverImpl($driverImpl);


            
//Paso 6: Configuracion clases proxies
            
$config->setProxyDir(__DIR__ '/../model/proxies');
            
$config->setProxyNamespace('proxies');

            
//Paso 7: Configuración de los datos de conexión
            
$connectionOptions = array(
                
'driver' => 'pdo_sqlsrv',
                
'host' => 'localhost',
                
'dbname' => 'pruebas',
                
'user' => 'DES',
                
'password' => 'ebixa'
            
);
            
//Pase 8: Creacion EntityManager
            
self::$em EntityManager::create($connectionOptions$config);
        }
        return 
self::$em;
    }
}
Ya por último para hacer las prueba de que todo esto funciona intento guardar un dato en la base de datos, y luego listar estos con este fichero.

Código PHP:
<?php

//Paso 1: Obtenemos una referencia del EntityManager
include_once "lib/orm/EntityManagerFactory.php";
$em EntityManagerFactory::createEntityManager();

//Paso 2: Creamos un objeto Huesped y le seteamos algunos valores para sus propiedades
$huesped = new EntitiesHuesped();
$huesped->setDocumento("1111111");
$huesped->setNombres("Juan");
$huesped->setApellidos("Perez");
$huesped->setTelefono("555555");

try {
    
//Paso 3: Persistimos el objeto Huesped
    
$em->persist($huesped);

    
//Paso 4: Sincronizamos los datos entre la bd y el EntityManager
    
$em->flush();

    
//Paso 5: Obtenemos el Id asignado al objeto que acabamos de persistir
    
echo 'Se persisti&oacute; el huesped ' $huesped->getNombres() . ' ' $huesped->getApellidos() . ' con ID ' $huesped->getId();

    
//Paso 6: Consultamos todos los objetos Huesped persistidos hasta ahora
    
echo '<strong>La tabla huesped contiene los siguientes datos</strong>';
    
$query $em->createQuery("SELECT h FROM entities\Huesped h");
    
print_r($query->getResult());
} catch (
Exception $exc) {
    echo 
$exc->getMessage();
}
?>
Y ahora el error que me da es el siguiente:
Class "Entities\Huesped" is not a valid entity or mapped super class.

Espero que me podais ayudar,gracias.
  #10 (permalink)  
Antiguo 15/01/2013, 05:59
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 9 meses
Puntos: 845
Respuesta: Imposible de montar doctrine2 + php

Ese error es porque no encontró la metadata de las entidades, comprueba los paths, en el primer post es lib/orm/Entities y en este último /../model/entities ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 15/01/2013, 09:18
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

Hola creo que los path están bien. Creo que en las pruebas he cambiado tal vez un poco la estructura, la voy a poner de nuevo aqui y voy a seguir esa para que no nos confundamos.

index.php --> Archivo donde intento obtener el entityManager y guardar un dato.(Fichero1)
lib/model/entities --> carpeta donde guardo las clases generadas automáticamente, con el (Fichero 2)
lib/model/proxies --> carpeta de los proxies, que está vacía.
lib/orm/doctrine-orm/Doctrine --> donde están todos los ficheros de doctrine
lib/orm/entitymanagerfactory.php --> fichero con el que conecto y obtengo un entitymanager de las clases generadas (Fichero3)

(Fichero1)
Código PHP:
<?php

//Paso 1: Obtenemos una referencia del EntityManager
include_once "lib/orm/EntityManagerFactory.php";
$em EntityManagerFactory::createEntityManager();

//Paso 2: Creamos un objeto Huesped y le seteamos algunos valores para sus propiedades
$huesped = new EntitiesHuesped();
$huesped->setDocumento("1111111");
$huesped->setNombres("Juan");
$huesped->setApellidos("Perez");
$huesped->setTelefono("555555");

try {
    
//Paso 3: Persistimos el objeto Huesped
    
$em->persist($huesped);

    
//Paso 4: Sincronizamos los datos entre la bd y el EntityManager
    
$em->flush();

    
//Paso 5: Obtenemos el Id asignado al objeto que acabamos de persistir
    
echo 'Se persisti&oacute; el huesped ' $huesped->getNombres() . ' ' $huesped->getApellidos() . ' con ID ' $huesped->getId();

    
//Paso 6: Consultamos todos los objetos Huesped persistidos hasta ahora
    
echo '<strong>La tabla huesped contiene los siguientes datos</strong>';
    
$query $em->createQuery("SELECT h FROM entities\Huesped h");
    
print_r($query->getResult());
} catch (
Exception $exc) {
    echo 
$exc->getMessage();
}
?>
(Fichero2)
Código PHP:
<?php

namespace Entities
;

use 
DoctrineORMMapping as ORM;

/**
 * 
 *
 * @ORM\Table(name="Huesped")
 * @ORM\Entity
 */
class Huesped
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    
private $id;

    
/**
     * @var string
     *
     * @ORM\Column(name="documento", type="string", length=10, nullable=false)
     */
    
private $documento;

    
/**
     * @var string
     *
     * @ORM\Column(name="nombres", type="string", length=50, nullable=false)
     */
    
private $nombres;

    
/**
     * @var string
     *
     * @ORM\Column(name="apellidos", type="string", length=50, nullable=false)
     */
    
private $apellidos;

    
/**
     * @var string
     *
     * @ORM\Column(name="telefono", type="string", length=10, nullable=false)
     */
    
private $telefono;


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

    
/**
     * Set documento
     *
     * @param string $documento
     * @return Huesped
     */
    
public function setDocumento($documento)
    {
        
$this->documento $documento;
    
        return 
$this;
    }

    
/**
     * Get documento
     *
     * @return string 
     */
    
public function getDocumento()
    {
        return 
$this->documento;
    }

    
/**
     * Set nombres
     *
     * @param string $nombres
     * @return Huesped
     */
    
public function setNombres($nombres)
    {
        
$this->nombres $nombres;
    
        return 
$this;
    }

    
/**
     * Get nombres
     *
     * @return string 
     */
    
public function getNombres()
    {
        return 
$this->nombres;
    }

    
/**
     * Set apellidos
     *
     * @param string $apellidos
     * @return Huesped
     */
    
public function setApellidos($apellidos)
    {
        
$this->apellidos $apellidos;
    
        return 
$this;
    }

    
/**
     * Get apellidos
     *
     * @return string 
     */
    
public function getApellidos()
    {
        return 
$this->apellidos;
    }

    
/**
     * Set telefono
     *
     * @param string $telefono
     * @return Huesped
     */
    
public function setTelefono($telefono)
    {
        
$this->telefono $telefono;
    
        return 
$this;
    }

    
/**
     * Get telefono
     *
     * @return string 
     */
    
public function getTelefono()
    {
        return 
$this->telefono;
    }
}

(Fichero3)
Código PHP:
<?php

require_once __DIR__ '/doctrine-orm/Doctrine/Common/ClassLoader.php';

use 
DoctrineCommonClassLoader,
    
DoctrineORMConfiguration,
    
DoctrineORMEntityManager,
    
DoctrineCommonCacheApcCache;

/**
 * Description of EntityManagerFactory
 * @author Juan Carlos Perez Zapata
 * @version 0.1
 */
class EntityManagerFactory {

    
/**
     * @var Doctrine\ORM\EntityManager
     */
    
private static $em;

    
/**
     * 
     * @return Doctrine\ORM\EntityManager
     */
    
public static function createEntityManager() {

        if (
self::$em == null) {

            
//Paso 1: Cargamos las clases del namespace Doctrine
            
$classLoader = new DoctrineCommonClassLoader('Doctrine'__DIR__ '/doctrine-orm');
            
$classLoader->register();

            
// Paso 2: Cargamos las entidades            
            
$entitiesClassLoader = new ClassLoader('Entities'realpath("lib/model"));
            
$entitiesClassLoader->register();

            
//Paso 3: Cargamos las clases que sirven de proxies
            
$proxiesClassLoader = new ClassLoader('proxies'realpath("lib/model"));
            
$proxiesClassLoader->register();

            
//Paso 4: Configuracion de la caché
            
$config = new Configuration();
            
$config->setMetadataCacheImpl(new DoctrineCommonCacheArrayCache());

            
//Paso 5: Configuracion de los metadatos de la entidades
            
$driverImpl $config->newDefaultAnnotationDriver(array(__DIR__ "/../model/entities"));
            
$config->setMetadataDriverImpl($driverImpl);


            
//Paso 6: Configuracion clases proxies
            
$config->setProxyDir(__DIR__ '/../model/proxies');
            
$config->setProxyNamespace('proxies');

            
//Paso 7: Configuración de los datos de conexión
            
$connectionOptions = array(
                
'driver' => 'pdo_sqlsrv',
                
'host' => 'localhost',
                
'dbname' => 'pruebas',
                
'user' => 'DES',
                
'password' => 'ebixa123'
            
);
            
//Pase 8: Creacion EntityManager
            
self::$em EntityManager::create($connectionOptions$config);
        }
        return 
self::$em;
    }
}
ESTOS SON LOS CORRECTOS, PERDONAR.

El error que me da nuevamente es: Class "Entities\Huesped" is not a valid entity or mapped super class.

Gracias
  #12 (permalink)  
Antiguo 16/01/2013, 10:55
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 9 meses
Puntos: 845
Respuesta: Imposible de montar doctrine2 + php

Intenta hacer coincidir las carpetas con el NS, las carpetas deberian ser:

lib/model/Entities
lib/model/Proxies

Código PHP:
Ver original
  1. $entitiesClassLoader = new ClassLoader('Entities', __DIR__ . "/../model/Entities");
  2. $entitiesClassLoader->register();
  3.  
  4. $proxiesClassLoader = new ClassLoader('proxies', __DIR__ . "/../model/Proxies");
  5. $proxiesClassLoader->register();
  6.  
  7. ....
  8.  
  9. $driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__ . "/../model/Entities"));
  10. $config->setMetadataDriverImpl($driverImpl);
  11.  
  12. $config->setProxyDir(__DIR__ . '/../model/Proxies');
  13. $config->setProxyNamespace('Proxies');
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 17/01/2013, 02:07
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

Nada :( ,esto empieza a ser desesperante. El nuevo error parece ser de rutas nuevamente.

Warning: require(C:\xampp\htdocs\_v4\lib\orm/../model/Entities\Entities\Huesped.php): failed to open stream: No such file or directory in C:\xampp\htdocs\_v4\lib\orm\doctrine-orm\Doctrine\Common\ClassLoader.php on line 164

Fatal error: require(): Failed opening required 'C:\xampp\htdocs\_v4\lib\orm/../model/Entities\Entities\Huesped.php' (include_path='.;C:\php\pear') in C:\xampp\htdocs\_v4\lib\orm\doctrine-orm\Doctrine\Common\ClassLoader.php on line 164

Para comprobar he puesto un eco de __DIR__ . "/../model/Entities" y luego la pego al navegador y si que llego a esa ruta... no entiendo nada :(

adjunto el nuevo fichero de recuperar entidad como queda.

Código PHP:
<?php

require_once __DIR__ '/doctrine-orm/Doctrine/Common/ClassLoader.php';

use 
DoctrineCommonClassLoader,
    
DoctrineORMConfiguration,
    
DoctrineORMEntityManager,
    
DoctrineCommonCacheApcCache;

/**
 * Description of EntityManagerFactory
 * @author Juan Carlos Perez Zapata
 * @version 0.1
 */
class EntityManagerFactory {

    
/**
     * @var Doctrine\ORM\EntityManager
     */
    
private static $em;

    
/**
     * 
     * @return Doctrine\ORM\EntityManager
     */
    
public static function createEntityManager() {

        if (
self::$em == null) {

            
//Paso 1: Cargamos las clases del namespace Doctrine
            
$classLoader = new DoctrineCommonClassLoader('Doctrine'__DIR__ '/doctrine-orm');
            
$classLoader->register();

            
// Paso 2: Cargamos las entidades 
            //echo  __DIR__ . "/../model/Entities";
            
$entitiesClassLoader = new ClassLoader('Entities'__DIR__ "/../model/Entities");
            
$entitiesClassLoader->register();

            
//Paso 3: Cargamos las clases que sirven de proxies
            
$proxiesClassLoader = new ClassLoader('Proxies'__DIR__ "/../model/Proxies");
            
$proxiesClassLoader->register();

            
//Paso 4: Configuracion de la caché
            
$config = new Configuration();
            
$config->setMetadataCacheImpl(new DoctrineCommonCacheArrayCache());

            
//Paso 5: Configuracion de los metadatos de la entidades
            
$driverImpl $config->newDefaultAnnotationDriver(array(__DIR__ "/../model/Entities"));
            
$config->setMetadataDriverImpl($driverImpl);


            
//Paso 6: Configuracion clases proxies
            
$config->setProxyDir(__DIR__ '/../model/Proxies');
            
$config->setProxyNamespace('Proxies');

            
//Paso 7: Configuración de los datos de conexión
            
$connectionOptions = array(
                
'driver' => 'pdo_sqlsrv',
                
'host' => 'localhost',
                
'dbname' => 'pruebas',
                
'user' => 'DES',
                
'password' => 'ebixa123'
            
);
            
//Pase 8: Creacion EntityManager
            
self::$em EntityManager::create($connectionOptions$config);
        }
        return 
self::$em;
    }
}
  #14 (permalink)  
Antiguo 17/01/2013, 06:06
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 9 meses
Puntos: 845
Respuesta: Imposible de montar doctrine2 + php

Hay que darse un poco de maña, si te fijas el require repite el NS, intenta modificando el ClassLoader a:

Código PHP:
Ver original
  1. $entitiesClassLoader = new ClassLoader('Entities', __DIR__ . "/../model");
  2. ...
  3. $proxiesClassLoader = new ClassLoader('Proxies', __DIR__ . "/../model");
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: clase, doctrine2, imposible, montar, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:58.