Ver Mensaje Individual
  #9 (permalink)  
Antiguo 15/01/2013, 02:16
yanker
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 3 meses
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.