Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/11/2011, 15:34
nico8287
 
Fecha de Ingreso: febrero-2007
Mensajes: 58
Antigüedad: 17 años, 3 meses
Puntos: 1
CI 2 Y Doctrine 2 Problema EntityRepository

Hola, estoy comenzando con Codeigniter y Doctrine y me tope con mi primer problema, he podido hacer la integración bien de eso estoy seguro ya que gracias a los comando de doctrine cree el esquema de la base de datos, me genero los getters and setters y me creo el archivo UserRepository que ahi es donde viene mi problema, al querer utilizar los métodos de esa Clase, o simplemente cargar el repositorio.



Error:
Fatal error: Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class models\repositories\UserRepository is not a valid entity or mapped super class.' in ..\htdocs\DoCI\application\libraries\Doctrine\ORM\ Mapping\MappingException.php:142 Stack trace: #0 htdocs\DoCI\application\libraries\Doctrine\ORM\Map ping\Driver\AnnotationDriver.php(148): Doctrine\ORM\Mapping\MappingException::classIsNotA ValidEntityOrMappedSuperClass('models\reposito...' ) #1 ..\htdocs\DoCI\application\libraries\Doctrine\ORM\ Mapping\ClassMetadataFactory.php(281): Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass('models\reposito...', Object(Doctrine\ORM\Mapping\ClassMetadata)) #2 ..\htdocs\DoCI\application\libraries\Doctrine\ORM\ Mapping\ClassMetadataFactory.php(170): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('models\reposito...') #3 ..\htdocs\DoCI\application\libraries\Doctrine\ORM\ EntityManager.php(257): Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor('models\ in ..\htdocs\DoCI\application\libraries\Doctrine\ORM\ Mapping\MappingException.php on line 142

Bueno comentare como tengo mi estructura en mi proyecto:

(Caperta-->models)
--> (Capeta-->repositories)
--> UserRepository.php (models-->repositories-->UserRepository )
--> User.php (models-->User )

La Clase User
(models-->User.php)
Código PHP:
namespace models;

use 
DoctrineCommonCollectionsArrayCollection;

/**
 * @Entity
 * @Table(name="usuarios")
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="tipo_usuario", type="string")
 * @DiscriminatorMap({"user" = "User", "ROLE_CLIENTE" = "Cliente"})
 * @entity(repositoryClass="models\repositories\UserRepository")
 */
class User
{
   

    
/**
     * @Id
     * @Column(type="integer", nullable=false)
     * @GeneratedValue(strategy="AUTO")
     */
    
protected $id;

    
/**
     * @Column(type="string", length=32, nullable=false)
     */
    
protected $username;

    
/**
     * @Column(type="string", length=64, nullable=false)
     */
    
protected $password;

    
/**
     * @Column(type="string", length=255, nullable=false)
     */
    
protected $email;



como se ve luego hay una clase Cliente la cual extiende a User, le quite los getters and setter para que quede mas limpio, pero en mi archivo estan.

La Clase UserRepository
(models-->reposotories->UserRepository.php)
Código PHP:
<?php
namespace modelsrepositories
;
use 
DoctrineORMEntityRepository;

class 
UserRepository extends EntityRepository {
        
    function 
validate(){
        
        
$em $this->getEntityManager();
        
$em->createQuery('SELECT u FROM models\User u WHERE u.username = "Cliente"')->getResult();
        
    }
}
?>
Un metodo simple para probar si funcionan.

Dentro de mi controlador, esta es una de las tantas maneras que he intentado llamar al repositorio
Código PHP:
         $em $this->doctrine->em;
        
$user $em->getRepository('models\repositories\UserRepository')
                           ->
validate(); 
Mi doctrine.php (Las dos lineas comentadas, debajo de la que dicen 'Symfony' es una de las soluciones que intente)
Código PHP:
<?php
use DoctrineORMEntityManager,
    
DoctrineORMConfiguration;

define('DEBUGGING'FALSE);

class 
Doctrine {

    public 
$em null;

    public function 
__construct()
    {
        
// load database configuration and custom config from CodeIgniter
        
require APPPATH 'config/database.php';

        
// Set up class loading.
        
require_once APPPATH 'libraries/Doctrine/Common/ClassLoader.php';

        
$doctrineClassLoader = new DoctrineCommonClassLoader('Doctrine'APPPATH 'libraries');
        
$doctrineClassLoader->register();

        
$entitiesClassLoader = new DoctrineCommonClassLoader('models'rtrim(APPPATH'/'));
        
$entitiesClassLoader->register();

        
$proxiesClassLoader = new DoctrineCommonClassLoader('Proxies'APPPATH 'models');
        
$proxiesClassLoader->register();

        
$symfonyClassLoader = new DoctrineCommonClassLoader('Symfony'APPPATH 'libraries/Doctrine');
        
$symfonyClassLoader->register();
//                $entityClassLoader = new \Doctrine\Common\ClassLoader('repositories', APPPATH.'models');
//                $entityClassLoader->register();

        // Choose caching method based on application mode
        
if (ENVIRONMENT == 'production')
        {
            
$cache = new DoctrineCommonCacheApcCache;
        }
        else
        {
            
$cache = new DoctrineCommonCacheArrayCache;
        }

        
// Set some configuration options
        
$config = new Configuration;

        
// Metadata driver
        
$driverImpl $config->newDefaultAnnotationDriver(APPPATH 'models');    
        
$config->setMetadataDriverImpl($driverImpl);

        
// Caching
        
$config->setMetadataCacheImpl($cache);
        
$config->setQueryCacheImpl($cache);

        
// Proxies
        
$config->setProxyDir(APPPATH 'models/Proxies');
        
$config->setProxyNamespace('Proxies');

        if (
ENVIRONMENT == 'development') {
            
$config->setAutoGenerateProxyClasses(TRUE);
        } else {
            
$config->setAutoGenerateProxyClasses(FALSE);
        }

        
// SQL query logger
        
if (DEBUGGING)
        {
            
$logger = new DoctrineDBALLoggingEchoSQLLogger;
            
$config->setSQLLogger($logger);
        }

        
// Database connection information
        
$connectionOptions = array(
            
'driver' => 'pdo_mysql',
            
'user' => $db['default']['username'],
            
'password' => $db['default']['password'],
            
'host' => $db['default']['hostname'],
            
'dbname' => $db['default']['database']
        );

        
// Create EntityManager
        
$this->em EntityManager::create($connectionOptions$config);
    }
}