Foros del Web » Programando para Internet » PHP » Zend »

Recurso para integración doctrine en zf 1.12

Estas en el tema de Recurso para integración doctrine en zf 1.12 en el foro de Zend en Foros del Web. Hola: Requiero que doctrine se integre a Zend sin embargo, obtengo mensajes como que no puede leer ciertos archivos, no obstante verifico la ruta de ...
  #1 (permalink)  
Antiguo 01/04/2013, 07:42
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Recurso para integración doctrine en zf 1.12

Hola:

Requiero que doctrine se integre a Zend sin embargo, obtengo mensajes como que no puede leer ciertos archivos, no obstante verifico la ruta de los archivos y los arreglo pero nada, entiendo que existen dos formas para que doctrine se integre a Zend: por medio de un recurso y por el bootstrap, en este caso yo estoy usando un recurso, este es el error:
Código PHP:
Ver original
  1. Warning: include_once(Doctrine\Common\Cache\ArrayCache.php): failed to open stream: No such file or directory in C:\xampp\php\library\Zend\Loader.php on line 134
  2.  
  3. Warning: include_once(): Failed opening 'Doctrine\Common\Cache\ArrayCache.php' for inclusion (include_path='C:\xampp\htdocs\libro\application/../library;C:\xampp\htdocs\libro\library;.;C:\xampp\php\library;C:\xampp\php\PEAR') in C:\xampp\php\library\Zend\Loader.php on line 134
  4.  
  5. Warning: require(Doctrine\Common\Cache\ArrayCache.php): failed to open stream: No such file or directory in C:\xampp\htdocs\libro\library\vendor\doctrine\common\lib\Doctrine\Common\ClassLoader.php on line 163
  6.  
  7. Fatal error: require(): Failed opening required 'Doctrine\Common\Cache\ArrayCache.php' (include_path='C:\xampp\htdocs\libro\application/../library;C:\xampp\htdocs\libro\library;.;C:\xampp\php\library;C:\xampp\php\PEAR') in C:\xampp\htdocs\libro\library\vendor\doctrine\common\lib\Doctrine\Common\ClassLoader.php on line 163
aqui se ve que no puede abrir ArrayCache, intenté reparar este error en:
Código PHP:
Ver original
  1. if ('development' == APPLICATION_ENV) {
  2.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : 'Doctrine\Common\Cache\ArrayCache';
  3.          //vendor\doctrine\cache\lib\Doctrine\Common\Cache\MemcacheCache
  4.         } else {
  5.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : 'Doctrine\Common\Cache\ApcCache';
  6.         }
  7.         $cache = new $cacheClass();
por esto:
Código PHP:
Ver original
  1. if ('development' == APPLICATION_ENV) {
  2.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : APPLICATION_PATH.'library\vendor\doctrine\cache\lib\Doctrine\Common\Cache\ArrayCache';
  3.          //vendor\doctrine\cache\lib\Doctrine\Common\Cache\MemcacheCache
  4.         } else {
  5.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : 'Doctrine\Common\Cache\ApcCache';
  6.         }
  7.         $cache = new $cacheClass();
esta tiene la ruta exacta de ArrayCache y el mensaje de error es el siguiente:
Código PHP:
Ver original
  1. Fatal error: Class 'C:\xampp\htdocs\libro\applicationlibrary\vendor\doctrine\cache\lib\Doctrine\Common\Cache\ArrayCache' not found in C:\xampp\htdocs\libro\library\Doctrine\Zend\Doctrine.php on line 36
la línea 36 es cuando define un nuevo objeto de la clase:
Código PHP:
Ver original
  1. $cache = new $cacheClass();
imagino que en este resource me falta o sobra algo mas pero no se que.

gracias por su ayuda.
  #2 (permalink)  
Antiguo 01/04/2013, 11:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 1 mes
Puntos: 2135
Respuesta: Recurso para integración doctrine en zf 1.12

El problema es que no tienes configurado correctamente tu autoloader para que pueda encontrar las clases de Doctrine, ¿como estas configurando el autoloader?
  #3 (permalink)  
Antiguo 01/04/2013, 11:24
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

Este sería mi resource.
Código PHP:
Ver original
  1. <?php
  2.  
  3. require_once 'Zend/Application/Resource/ResourceAbstract.php';
  4. require_once '/../../vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php';
  5.  
  6. use Doctrine\Common\ClassLoader,
  7.     Doctrine\ORM\Configuration,
  8.     Doctrine\ORM\EntityManager,
  9.     Doctrine\DBAL\Types\Type,
  10.     Doctrine\Common\Cache\ArrayCache,
  11.     Doctrine\DBAL\Logging\EchoSqlLogger;
  12.  
  13. class Doctrine_Zend_Doctrine extends Zend_Application_Resource_ResourceAbstract
  14. {
  15. public function init()
  16. {
  17.     $options = $this -> getOptions();
  18.  
  19.     // Doctrine (use include_path)
  20.     $classLoader = new \Doctrine\Common\ClassLoader('Doctrine');
  21.     $classLoader -> register();
  22.      
  23.     // Entities
  24.     $classLoader = new \Doctrine\Common\ClassLoader('Application\Models',dirname(APPLICATION_PATH) . DIRECTORY_SEPARATOR . 'library');
  25.     $classLoader -> register();
  26.     //Proxies
  27.     $classLoader = new \Doctrine\Common\ClassLoader ('Application\Proxies', dirname ( APPLICATION_PATH ) . DIRECTORY_SEPARATOR . 'library' );
  28.     $classLoader -> register();
  29.     //Repositories
  30.     $classLoader = new \Doctrine\Common\ClassLoader('Application\Repositories',dirname(APPLICATION_PATH) . DIRECTORY_SEPARATOR . 'library');
  31.     $classLoader -> register();
  32.        
  33.     // Now configure doctrine
  34.         if ('development' == APPLICATION_ENV) {
  35.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : APPLICATION_PATH.'\library\vendor\doctrine\cache\lib\Doctrine\Common\Cache\ArrayCache';
  36.          //vendor\doctrine\cache\lib\Doctrine\Common\Cache\MemcacheCache
  37.         } else {
  38.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : 'Doctrine\Common\Cache\ApcCache';
  39.         }
  40.         $cache = new $cacheClass();
  41.        
  42.         $config = new Configuration();
  43.         $config -> setMetadataCacheImpl($cache);
  44.         $config -> setMetadataDriverImpl(Doctrine\ORM\Mapping\Driver\AnnotationDriver::create(array($options['entitiesPath'])));
  45.         $config -> setQueryCacheImpl($cache);
  46.         $config -> setProxyDir($options['proxiesPath']);
  47.         $config -> setProxyNamespace('Application\Proxies');
  48.         $config -> setAutoGenerateProxyClasses(('development' == APPLICATION_PATH));
  49.         $em = EntityManager::create(
  50.             $this -> _buildConnectionOptions($options['connection']),
  51.             $config
  52.         );
  53.        
  54.         Zend_Registry::set('em', $em);
  55.        
  56.         // end
  57.         return $em;
  58. }
  59.  
  60. protected function _buildConnectionOptions(array $options)
  61. {
  62. $connectionSpec = array(
  63.             'pdo_sqlite'    => array('user', 'password', 'path', 'memory'),
  64.             'pdo_mysql'     => array('user', 'password', 'host', 'port', 'dbname', 'unix_socket'),
  65.             'pdo_pgsql'     => array('user', 'password', 'host', 'port', 'dbname'),
  66.             'pdo_oci'       => array('user', 'password', 'host', 'port', 'dbname', 'charset')
  67. );
  68.  
  69. $connection = array(
  70.             'driver' => $options['driver']
  71. );
  72.  
  73. foreach ($connectionSpec[$options['driver']] as $driverOption) {
  74.     if (isset($options[$driverOption]) && !is_null($driverOption)) {
  75.         $connection[$driverOption] = $options[$driverOption];
  76.     }
  77. }
  78.  
  79. if (isset($options['driverOptions']) && !is_null($options['driverOptions'])) {
  80.     $connection['driverOptions'] = $options['driverOptions'];
  81. }
  82.  
  83. return $connection;
  84. }
  85. }
  #4 (permalink)  
Antiguo 01/04/2013, 11:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 1 mes
Puntos: 2135
Respuesta: Recurso para integración doctrine en zf 1.12

Te recomiendo usar la integración "oficial": https://github.com/guilhermeblanco/z...ork1-doctrine2

Ya que esta más probada, pero tu problema concreto es el path del autoloader, necesitas agregarlo al autloader de Zend, pero usa la implementación "oficial" ya lo hace por ti.

Saludos.
  #5 (permalink)  
Antiguo 01/04/2013, 12:40
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

No eres el único que me sugiere que use dicha integración de hecho ya lo hice, primero que se descargó cerca de 400 Mb, segundo que dicha integración no cumplia con las rutas que en la misma integración especificaba en el application.ini, logre generar las reversas pero modificando diferentes archivos, es decir no esta todo integrado, me sugirieron que lo realizara al pie de la letra, yo lo hice usando git, creo que cumpliendo al pie de la letra de la explicación, pero aqui me encuentro.

Gracias, seguir buscando.
  #6 (permalink)  
Antiguo 01/04/2013, 13:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 1 mes
Puntos: 2135
Respuesta: Recurso para integración doctrine en zf 1.12

Es muy raro que te haya bajado cerca de 400 MB, se me hace exagerado pero bueno...

Como te digo te falta registrar los autoloaders, si revisas la integración "oficial", tienes que establecer el autloader para Doctrine\Common, Doctrine\DBAL, y Doctrine\ORM, ya que como están en diferentes partes, es necesario que tengas los 3 loaders.

En el ejemplo que tienes, no estas usando ninguno de los 3 loaders y es por eso que te marca error, ya que no encuentra el archivo, configura correctamente los autoloaders y no deberías de tener problemas.

Saludos.
  #7 (permalink)  
Antiguo 01/04/2013, 14:15
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

imagino que es muy similar a mi cli-config.php, puesto que pude hacer la reversa y me funciona perfectamente
Código PHP:
Ver original
  1. $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\ORM', realpath(__DIR__ . '/../../vendor/doctrine/orm/lib'));
  2. $classLoader->register();
  3. $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL', realpath(__DIR__ . '/../../vendor/doctrine/dbal/lib'));
  4. $classLoader->register();
  5. $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\Common', realpath(__DIR__ . '/../../vendor/doctrine/common/lib'));
  6. $classLoader->register();
integre estos tres loaders al que te refieres cambiando las rutas y probando que estas sean correctas, pero continuo con el error.
  #8 (permalink)  
Antiguo 01/04/2013, 16:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 1 mes
Puntos: 2135
Respuesta: Recurso para integración doctrine en zf 1.12

¿Te genera el mismo error?
  #9 (permalink)  
Antiguo 01/04/2013, 16:21
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

Si me genera el mismo error
  #10 (permalink)  
Antiguo 01/04/2013, 16:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 1 mes
Puntos: 2135
Respuesta: Recurso para integración doctrine en zf 1.12

Deja el cache class como estaba antes (Doctrine\Common\Cache\ArrayCache) no le debes de pasar el path completo porque no tiene caso, con eso lo debe de tomar el autoloader de Doctrine.
  #11 (permalink)  
Antiguo 01/04/2013, 16:38
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

vuelvo al error inicial:
Código HTML:
Ver original
  1. Warning: include_once(Doctrine\Common\Cache\ArrayCache.php): failed to open stream: No such file or directory in C:\xampp\php\library\Zend\Loader.php on line 134
  2.  
  3. Warning: include_once(): Failed opening 'Doctrine\Common\Cache\ArrayCache.php' for inclusion (include_path='C:\xampp\htdocs\libro\application/../library;C:\xampp\htdocs\libro\library;.;C:\xampp\php\library;C:\xampp\php\PEAR') in C:\xampp\php\library\Zend\Loader.php on line 134
  4.  
  5. Warning: require(C:\xampp\htdocs\libro\library\vendor\doctrine\common\lib\Doctrine\Common\Cache\ArrayCache.php): failed to open stream: No such file or directory in C:\xampp\htdocs\libro\library\vendor\doctrine\common\lib\Doctrine\Common\ClassLoader.php on line 163
  6.  
  7. Fatal error: require(): Failed opening required 'C:\xampp\htdocs\libro\library\vendor\doctrine\common\lib\Doctrine\Common\Cache\ArrayCache.php' (include_path='C:\xampp\htdocs\libro\application/../library;C:\xampp\htdocs\libro\library;.;C:\xampp\php\library;C:\xampp\php\PEAR') in C:\xampp\htdocs\libro\library\vendor\doctrine\common\lib\Doctrine\Common\ClassLoader.php on line 163
Valga la aclaración que en:
Código PHP:
Ver original
  1. if ('development' == APPLICATION_ENV) {
  2.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : 'Doctrine\Common\Cache\ArrayCache';
  3.          //vendor\doctrine\cache\lib\Doctrine\Common\Cache\MemcacheCache
  4.         } else {
  5.          $cacheClass = isset($options['cacheClass']) ? $options['cacheClass'] : 'Doctrine\Common\Cache\ApcCache';
  6.         }
pregunta si $options['cacheClass'] está definido en application.ini y lo esta de esta forma

resources.doctrine.cacheClass = "Doctrine\Common\Cache\ArrayCache"

entonces me viene a la mente que en application.ini debería registrar estos autloaders, lo que no se como, de ser así me pregunto como es que el cli-config.php me generaba la reversa?
  #12 (permalink)  
Antiguo 01/04/2013, 17:03
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

De hecho ya no me esta apareciendo el error lo que ahora tengo son warning:
Código HTML:
Ver original
  1. Warning: include_once(Doctrine\ORM\Configuration.php): failed to open stream: No such file or directory in C:\xampp\php\library\Zend\Loader.php on line 134
  2.  
  3. Warning: include_once(): Failed opening 'Doctrine\ORM\Configuration.php' for inclusion (include_path='C:\xampp\htdocs\libro\application/../library;C:\xampp\htdocs\libro\library;.;C:\xampp\php\library;C:\xampp\php\PEAR') in C:\xampp\php\library\Zend\Loader.php on line 134
  4.  
  5. Warning: include_once(Doctrine\DBAL\Configuration.php): failed to open stream: No such file or directory in C:\xampp\php\library\Zend\Loader.php on line 134
  6. .......
son muchos warning de todas las librerías del doctrine.
  #13 (permalink)  
Antiguo 01/04/2013, 21:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 1 mes
Puntos: 2135
Respuesta: Recurso para integración doctrine en zf 1.12

Si te fijas, el warning lo emite Zend Loader, por lo que parece que más bien nunca estas entrando a tu clase Doctrine_Zend_Doctrine, para probarlo, en el init al inicio pon un die('aqui') y revisa si se para o no la ejecución, si no se para es que no esta entrando.

La razón de eso es que no agregaste el path a donde pusiste tu clase al Resource Loader.

Es por eso que te animo a que uses la integración oficial, porque ya tiene todo listo y configurado eso, si el problema eran los paths, solo es cuestión que lo apuntes, si ya tienes todo Doctrine descargado, solo baja como zip la integración y ajusta los paths.

Saludos.
  #14 (permalink)  
Antiguo 02/04/2013, 07:54
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

Gracias GatorV, verifique una y otra ves el código y exactamente no se donde ni como pero ya no tengo los warning tendrá algo que ver el ArrayCache?.

Una última consulta, si bien no tengo los warning, cómo hago para probar que este fue integrado satisfactoriamente al zend, creo que viendo la información existente en una de mis tablas en dicho caso, agregue en IndexController esto:

Código PHP:
Ver original
  1. public function indexAction()   {
  2.         $users = Zend_Registry::get('em')
  3.             ->createQuery('select s from \Application\Models\Usuario s')
  4.             ->getResult();
  5.         $this->view->users = $users;
  6.     }
Considerando que Usuario.php tiene los get y set de mi tabla usuario y esta ubicado en:
Cita:
Proyecto
\library
\Application
\Models
Usuario.php
Creo que me falta algúna ruta adicional puesto que lo llamo desde el IndexController.

Respecto al uso de la integración oficial pues si me interesa mucho, logre encontrar ejemplos zf-beginners-doctrine2-master: ch5, ch6 y ch7 que de acuerdo a su manual es una adaptación del Libro Zend Framework: A Beginner’s Guide donde usaba doctrine 1.x pero este ejemplo usa dotrine 2.0.

Mi problema es que aún no logro entender el porque en mi descarga veo las librerías de doctrine en diferentes lugares como lo muestra el ejemplo mas arriba, ademas que este usa un container, pero si, es un hecho que lo tengo que probar.

Perdon por las molestias y muchas gracias por tu colaboración
  #15 (permalink)  
Antiguo 02/04/2013, 08:43
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

Bueno, no es un tema de ArrayCache, lo que hice fue agregar a la carpeta c:\xampp\php\pear\ todas las carpetas que me faltaban de Doctrine es decir \Symfony, \Common, \DBAL y \ORM y esto habría solucionado mi problema.

Si me lee Usuario.php tiene esta annotation:

Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace Application\Models;
  4.  
  5. use Doctrine\ORM\Mapping as ORM;
  6.  
  7. /**
  8.  * Usuario
  9.  *
  10.  * @ORM\Table(name="usuario")
  11.  * @ORM\Entity
  12.  */
  13. class Usuario
  14. {
  15. ....
  16.     private $id;
esto me envia el siguiente mensaje:
Cita:
Message: [Semantical Error] The annotation "@Doctrine\ORM\Mapping\Table" in class Application\Models\Usuario does not exist, or could not be auto-loaded.
cambie las anotaciones de la siguiente forma:
Código PHP:
Ver original
  1. namespace Application\Models;
  2.  
  3. use Doctrine\ORM\Mapping as ORM;
  4.  
  5. /**
  6.  * Usuario
  7.  *
  8.  * @Table(name="usuario")
  9.  * @Entity
  10.  */
  11. class Usuario
  12. {
y esto me envia este otro mensaje:
Cita:
Message: [Semantical Error] The annotation "@Table" in class Application\Models\Usuario was never imported. Did you maybe forget to add a "use" statement for this annotation?
  #16 (permalink)  
Antiguo 02/04/2013, 09:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 6 meses
Puntos: 845
Respuesta: Recurso para integración doctrine en zf 1.12

Talves te falte registrar las annotations http://docs.doctrine-project.org/pro...ng-annotations, y según tu código el uso correcto seria el primer ejemplo, doctrine utiliza los imports para determinar que clase utilizar.
__________________
http://es.phptherightway.com/
thats us riders :)
  #17 (permalink)  
Antiguo 03/04/2013, 10:06
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Recurso para integración doctrine en zf 1.12

Muchas gracias por su colaboracion, en realidad no pude instalar la integración de https://github.com/guilhermeblanco/, sin embargo con otros manuales integré doctrine 2.1.7, pero continuaré probando esta integración.

Etiquetas: doctrine, integración, recurso
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 02:18.