2010-11-04 23 views
9

Tengo un problema extraño. Quiero apagar el generador automático de mis servidores proxy en Doctrina 2. He encontrado esta línea de código que debe hacer (y lo hace) el truco:Doctrine 2. Auto generación de proxies

$config->setProxyDir(APPPATHSYSTEM."/proxies"); 
$config->setProxyNamespace('Proxies'); 

// Auto generate proxies for development 
$config->setAutoGenerateProxyClasses(DEVELOPMENT); 

En mi entorno de prueba de los proxies se encuentran en application/proxies. es decir .:

application/proxies/BaseUserProxy.php 

Cuando estoy en el entorno de mi código de repente busca los proxies de aplicación en /proxy/proxy que no es la ubicación real.

Entiendo que tiene algo que ver con el espacio de nombres, pero no entiendo por qué se comporta de manera diferente cuando se usa el método setAutoGenerateProxy.

¿Alguna idea?

edición

hice generar los nuevos servidores proxy utilizando el:

orm:generate-proxies 

opción.

Lo que me dio este resultado:

php doctrine.php orm:generate-proxies 
Processing entity "Base\Element" 
Processing entity "Base\Page" 
... 
Processing entity "Base\Site" 

Proxy classes generated to "/var/www/application/proxies" 

En cuanto a la última línea, los servidores proxy se generan en/var/www/aplicación/proxies. La lista de directorios tiene este aspecto:

BaseElementProxy.php 
BasePageProxy.php 
... 
BaseSiteProxy.php 

Así que no hay ningún directorio adicional de Proxies. Pero cuando me refrescar mi sitio Web ahora se piensa que hay, me da el siguiente error:

Warning: require(/var/www/application//proxies/Proxies/BaseUserProxy.php) 
[function.require]: failed to open stream: 
No such file or directory in /var/www/library/Doctrine/Common/ClassLoader.php on line 148 

Por qué se añade el directorio de servidores proxy adicional? Si genero los proxies en cada solicitud, no se ve en el directorio Proxies adicional. ¿Nadie?

@Bryan M.: Esa no es una solución, sino una solución. Además, no funciona. Al generar los proxies, si se aplica su sugerencia, se generarán en APPPATHSYSTEM y mi aplicación web intentará cargarlos desde APPPATHSYSTEM. "Proxies". El problema es que el sistema busca los proxies en diferentes lugares si uso:

$config->setAutoGenerateProxyClasses(DEVELOPMENT); 

Si el desarrollo es cierto, que se verá en APPPATHSYSTEM. Si DEVELOPMENT se establece en false, se verá en APPPATHSYSTEM. "Proxies". Simplemente cambiar la constancia de DESARROLLO rompe mi aplicación, lo que teóricamente no debería ser posible.

+0

Intenta configurar el directorio de Proxies con solo APPPATHSYSTEM. Debería recoger el espacio de nombres 'Proxies' desde allí. –

Respuesta

2

No creo que los proxies de AutoGenerated cuiden.

En lugar de empujar los proxies autogenerados a la producción, probablemente debería doctrine orm:generate-proxies, que sospecho que los colocará en el lugar donde está configurado su código de producción para buscarlos.

+0

Lo intenté. Verifica mi edición –

4

¿Está desarrollando en OS X y desplegándose en Linux? El sistema de archivos de OS X es el caso insensible.Por lo tanto, a menudo me encuentro con un problema donde escribo mal el caso de una clase, y se ejecuta y pasa muy bien en el entorno local, pero se bloquea en nuestro servidor.

En este caso, en OS X, el espacio de nombres "Proxies" puede resolverse en "/ proxies", pero en producción no puede encontrar la carpeta de clases y la crea en "/ proxies/Proxies ".

3

Si cambia el nombre de la carpeta a algo llamado "/ temp", se dará cuenta de la diferencia entre la ruta y el espacio de nombres.

La ruta es la ruta absoluta al directorio en el que se generan los proxies. El espacio de nombres es necesario para permitirle configurar cómo un autocargador recoge estas entidades.

La ruta en su caso tiene que ser algo así como "proxies/Proxies" y el espacio de nombres es "Proxies". Su autocargador debe estar configurado para escuchar el prefijo de espacio de nombres "Proxies" en el directorio "proxies /".

Sin embargo, esto es todo estado de ánimo con Doctrine 2 RC1, encontramos una forma de cargar explícitamente una ruta de proxy sin la ayuda de un autocargador sin costo adicional. Por lo tanto, la configuración del Espacio de nombre de Proxy solo es necesaria para garantizar que ninguna otra clase esté en el mismo espacio de nombres que los proxies.

+0

Sé la diferencia entre un espacio de nombres y una ruta :). Lee mi publicación nuevamente por el problema real. Gracias por tu reacción. –