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

Problema con Namespace: no encuentra clase dentro de Library/My

Estas en el tema de Problema con Namespace: no encuentra clase dentro de Library/My en el foro de Zend en Foros del Web. Saludos. Aprovecho mi primer mensaje en este magnífico foro para pedir ayuda sobre un problema que me está dando muchos dolores de cabeza en Zend ...
  #1 (permalink)  
Antiguo 28/11/2010, 07:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Problema con Namespace: no encuentra clase dentro de Library/My

Saludos.

Aprovecho mi primer mensaje en este magnífico foro para pedir ayuda sobre un problema que me está dando muchos dolores de cabeza en Zend Framework 1.10.

Tengo una aplicación con un plug-in llamado CheckAccess para comprobar permisos de acceso a los diferentes módulos, controladores y acciones. Este plug-in llama a su vez a una clase "externa" llamada Acl.php y localizada dentro de Zend/Library, concretamente en la carpeta My/Permission.

Dentro de Application.ini he registrado el namespace:

Código PHP:
autoloaderNamespaces[] = "My" 
Pues bien, el plug-in funciona adecuadamente pero cuando trata de instanciar un objeto perteneciente a la clase Acl.php, concretamente
Código PHP:
new My_Permission_Acl 
salta el siguiente error:

Cita:
Fatal error: Class 'My_Permission_Acl' not found in E:\Utilidades\wamp\Zend\library\My\Controller\Plug in\checkaccess.php
La clase Acl.php dentro de Zend/Library/My/Permission es tal que así:

Código PHP:
class My_Permission_Acl extends Zend_Acl   {código aquí} 
Mi bootstrap es el siguiente:

Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

        protected function 
_initPlugins()
        {
        require_once 
'Zend/Loader/Autoloader.php';
        
$this->bootstrap('frontController');

        
$plugin = new My_Controller_Plugin_Layout();
        
$this->frontController->registerPlugin($plugin);
        
        
$plugin2 = new My_Controller_Plugin_CheckAccess();
        
$this->frontController->registerPlugin($plugin2);
        
        }
        


Realmente no sé si ese "require_once Autoloader" es realmente necesario. El plug-in Layout sirve para cargar un layout diferente dependiendo del módulo concreto de la aplicación y funciona correctamente.

¿Podría alguien echarme una mano, por favor? Espero haberme explicado bien

Muchas gracias por anticipado.
  #2 (permalink)  
Antiguo 28/11/2010, 07:40
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

1º Checkea el include_path(para ver donde le estas diciendo que esta library) en el index.php.

2º En realidad tu _initPlugins no es necesario(siempre y cuando no tengas que pasar parametros en el constructor del plugin), lo podes hacer en el application.ini

Código INI:
Ver original
  1. resources.frontController.plugins.Layout="My_Controller_Plugin_Layout"
  2. resources.frontController.plugins.CheckAccess= "My_Controller_Plugin_CheckAccess"

Salu2.
  #3 (permalink)  
Antiguo 28/11/2010, 09:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

Cita:
Iniciado por masterpuppet Ver Mensaje
1º Checkea el include_path(para ver donde le estas diciendo que esta library) en el index.php.

2º En realidad tu _initPlugins no es necesario(siempre y cuando no tengas que pasar parametros en el constructor del plugin), lo podes hacer en el application.ini

Código INI:
Ver original
  1. resources.frontController.plugins.Layout="My_Controller_Plugin_Layout"
  2. resources.frontController.plugins.CheckAccess= "My_Controller_Plugin_CheckAccess"

Salu2.
Gracias por contestar. Mi include creo que está correcto:

Código PHP:
set_include_path(implode(PATH_SEPARATOR, array(
    
realpath(APPLICATION_PATH '/../library'),
    
get_include_path(),
))); 
Tanto el plugin Layout como CheckAccess están en "Library/My/Controller/Plugin" y ambos son encontrados perfectamente. El problema radica en la clase Acl.php ubicada en Library/My/Permission. CheckAccess trata de instanciar un objeto de esa clase y salta el error de no encontrada.

Por otro lado, necesito tener el _initPlugins en el Bootstrap porque con sólo registrarlos en application.ini no funcionan. ¿Será quizás porque ambos utilizan el preDispatch?

En cualquier caso lo que realmente me bloquea es que la aplicación no encuentre la clase Acl.php.

Un saludo.
  #4 (permalink)  
Antiguo 28/11/2010, 13:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

En realidad si te carga el plugin deberia cargar la clase, pero hay algo que no me cierra y es la estructura de tu proyecto.

Tenes tu proyecto dentro de E:\Utilidades\wamp\Zend ?, osea es asi:

E:\Utilidades\wamp\Zend\
E:\Utilidades\wamp\Zend\application
E:\Utilidades\wamp\Zend\library
E:\Utilidades\wamp\Zend\library\My
E:\Utilidades\wamp\Zend\library\Zend
E:\Utilidades\wamp\Zend\public
  #5 (permalink)  
Antiguo 28/11/2010, 14:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

Cita:
Iniciado por masterpuppet Ver Mensaje
En realidad si te carga el plugin deberia cargar la clase, pero hay algo que no me cierra y es la estructura de tu proyecto.

Tenes tu proyecto dentro de E:\Utilidades\wamp\Zend ?, osea es asi:

E:\Utilidades\wamp\Zend\
E:\Utilidades\wamp\Zend\application
E:\Utilidades\wamp\Zend\library
E:\Utilidades\wamp\Zend\library\My
E:\Utilidades\wamp\Zend\library\Zend
E:\Utilidades\wamp\Zend\public
No exactamente. Mi proyecto está dentro de
Cita:
E:\Utilidades\wamp\www\pruebamodulos
y la librería se encuentra en
Cita:
E:\Utilidades\wamp\Zend\library
El plug-in está en
Cita:
E:\Utilidades\wamp\Zend\library\My\Controller\Plug in (la palabra plugin en realidad está junta, no sé porque aquí sale separada)
Y la clase en: E:\Utilidades\wamp\Zend\library\My\Permission

Como he señalado anteriormente, los plugin -CheckAccess y Layout- funcionan bien. Sin embargo, al tratar de instanciar un objeto de la clase Acl.php ubicada en My\Permission es cuando salta el error de no encontrada.

Concretamente, el error que me da es el siguiente:

Cita:
Fatal error: Class 'My_Permission_Acl' not found in E:\Utilidades\wamp\Zend\library\My\Controller\Plug in\checkaccess.php on line 31
Es decir, en la linea 31 de CheckAccess hay lo siguiente:

Código PHP:
$this->_acl =   new My_Permission_Acl(APPLICATION_PATH."/configs/permissions.ini"); 
Si quieres te pongo una captura del árbol de directorios. Una cosa importante, el código lo he sacado de esta web:

http://otroblogmas.com/zend_acl-autorizacion-y-permisos-en-zend-framework/

Me parecía un buen sistema para implementar un control de acceso basado en permisos. Llevo varios días tratando de hacerlo funcionar y no he podido aunque ciertamente tengo poca experiencia con Zend .

Muchas gracias por tu tiempo.

Última edición por nerthalas; 28/11/2010 a las 15:18
  #6 (permalink)  
Antiguo 28/11/2010, 15:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

A ver, si tu proyecto esta en E:\Utilidades\wamp\www\pruebamodulos y tu le dices que tu library esta en APPLICATION_PATH . '/../library' no puede estar atacando
E:\Utilidades\wamp\Zend\library\, no se si me explico bien, dentro de pruebamodulos no tienes un library y ese a su vez tiene la carpeta My?,
si podes saca un ss del arbol de directorios a ver si podemos ver que es lo que esta fallando.

Salu2.
  #7 (permalink)  
Antiguo 28/11/2010, 16:43
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

Cita:
Iniciado por masterpuppet Ver Mensaje
A ver, si tu proyecto esta en E:\Utilidades\wamp\www\pruebamodulos y tu le dices que tu library esta en APPLICATION_PATH . '/../library' no puede estar atacando
E:\Utilidades\wamp\Zend\library\, no se si me explico bien, dentro de pruebamodulos no tienes un library y ese a su vez tiene la carpeta My?,
si podes saca un ss del arbol de directorios a ver si podemos ver que es lo que esta fallando.

Salu2.
En fin, cuando uno es aprendiz pasan estas cosas. Resulta que he puesto los plugins dentro de E:\Utilidades\wamp\www\pruebamodulos\library y ya funciona todo correctamente.

Te agradezco muchísimo el tiempo que has invertido en este post. Desde que he comenzado con Zend me han surgido múltiples dudas y errores que he ido resolviendo con ayuda de San Google, pero este último me traía por la calle de la amargura desde hace unos días.

Básicamente tengo una aplicación modular y con este plug-in pretendo utilizar un sistema de permisos para los diferentes usuarios que, según su nivel de privilegios, sólo puedan acceder a determinadas zonas de la web.

De verdad, muchas gracias
  #8 (permalink)  
Antiguo 28/11/2010, 17:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

Me alegro que lo pudiste resolver, te doy un consejo, cuidado con las mayusculas y minusculas, si bien ahora te funciona cuando pases a producción(seguramente un linux) te van a saltar errores, te lo digo por clases como My_Controller_Plugin_CheckAcces, el fichero se llama checkaccess.php y deberia ser igual que el final de la clase, osea CheckAccess.php.

Salu2.
  #9 (permalink)  
Antiguo 28/11/2010, 18:07
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con Namespace: no encuentra clase dentro de Library/My

Cita:
Iniciado por masterpuppet Ver Mensaje
Me alegro que lo pudiste resolver, te doy un consejo, cuidado con las mayusculas y minusculas, si bien ahora te funciona cuando pases a producción(seguramente un linux) te van a saltar errores, te lo digo por clases como My_Controller_Plugin_CheckAcces, el fichero se llama checkaccess.php y deberia ser igual que el final de la clase, osea CheckAccess.php.

Salu2.
Seguiré tu consejo. Gracias!!

Etiquetas: clase, encuentra, namespace
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 22:10.