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

Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Estas en el tema de Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado] en el foro de Zend en Foros del Web. Hola, no es la primera vez que uso una estructura modular, pero llevo un rato ya sin saber como solucionar esto, Zend Framework me tira ...
  #1 (permalink)  
Antiguo 22/04/2010, 12:37
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 10 meses
Puntos: 2
Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Hola, no es la primera vez que uso una estructura modular, pero llevo un rato ya sin saber como solucionar esto, Zend Framework me tira esta excepción:

Fatal error: Class 'Authentication_Form_Login' not found in C:\xampp\htdocs\zf\application1\application\module s\default\controllers\IndexController.php on line 8

Pongo los códigos susceptibles al error, a ver si vosotros lo veis y podeis ayudarme porfavor:

Código PHP:
[production]
phpSettings.display_startup_errors 0
phpSettings
.display_errors 0
includePaths
.library APPLICATION_PATH "/../library"
bootstrap.path APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.moduleDirectory APPLICATION_PATH "/modules"
resources.modules[] = 
Código PHP:
// \application\modules\default\controllers\IndexController.php
class IndexController extends Zend_Controller_Action {

    public function 
init() {
    }

    public function 
indexAction() {
        
$form = new Authentication_Form_Login();
        
$this->view->form $form;
    }

Código PHP:
// \application\modules\authentication\forms\Login.php
// Obviamente el form es un Proof of concept, faltan validadores etc...
class Authentication_Form_Login extends Zend_Form
{
    public function 
__construct($option null) {
        
parent::__construct($option);

        
$this->setName('login');

        
$username = new Zend_Form_Element_Text('username');
        
$username->setLabel('User name:')
                 ->
setRequired();

        
$password = new Zend_Form_Element_Password('password');
        
$password->setLabel('Password:')
                 ->
setRequired(true);
                 
        
$login = new Zend_Form_Element_Submit('login');
        
$login->setLabel('Login');

        
$this->addElements(array($username$password$login));
        
$this->setMethod('post');
        
$this->setAction(Zend_Controller_Front::getInstance()->getBaseUrl().'/authentication/login');
    }

Código PHP:
// Tengo Bootstrap en /application/modules/authentication/Bootstrap.php
class Authentication_Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
}
// Tengo Bootstrap en /application/Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
}
/*
 * Pero si intento poner uno  /application/modules/default/Bootstrap.php al
 * actualizar la aplicación se queda cargando hasta el infinito, solo para cuando
 * da error de carga.
 */ 
Espero que vosotr@s que soys lo mejorcito sepais verlo y podais ayudarme... Cuatro ojos ven más que dos jiji
Muchas gracias !!

Última edición por yoguuu; 23/04/2010 a las 09:25 Razón: Gramática... Oishh
  #2 (permalink)  
Antiguo 22/04/2010, 13:06
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Tengo entendido que a partir de Zend Framework 1.8 o 1.9 no hacía falta llamar explicitamente al Zend_Loader_Autoloader_Resource o al ...Module_Autoloader especificarle el namespace y basepath ni hace falta especificarle los types / namespaces / modules al loader para decirle los resources por que ahora ZF lo hace digamos... "Automagicamente" nop ?

Pfff sinó... no sé que me estoy dejando :S
  #3 (permalink)  
Antiguo 22/04/2010, 14:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Tuve el mismo problema hace poco pero porque movi los paths, pero lo solucione declarando el autloader:
Código PHP:
Ver original
  1. protected function _initResourceAutoloader()
  2.     {
  3.         $resourceLoader = new Zend_Application_Module_Autoloader(array(
  4.             'basePath'  => APPLICATION_PATH . '/modules/default',
  5.             'namespace' => 'App',
  6.         ));
  7.        
  8.         return $resourceLoader;
  9.     }

Saludos.
  #4 (permalink)  
Antiguo 22/04/2010, 15:54
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

He copiado y pegado este código y he hecho varias pruebas.

Lo he puesto en los dos bootstraps, probados en cada uno únicamente y simultaneamente, lo he probado con namespace App y sin namespace... Renombrando cada vez el nombre de la llamada a la clase y el nombre de la clase para adaptarlo al namespace. Y de nuevo cada vez lo he probado con el BasePath seteado a /modules/default y solo a /modules (con la constante)

Y en ninguno de los casos me ha funcionado, sigue dando la misma exception en todos los casos.

Yo tenía entendido que Zend Framework a partir que tu le pones esto:
Código PHP:
resources.frontController.moduleDirectory APPLICATION_PATH "/modules"
resources.modules[] = 
El autoloader comenzaba a funcionar a partir de ahí... Siguiendo la pauta claro de los resources por defecto que ZF usa para modulos. Entiendo... aunque incredulo que si me pusiste ese código, sigue siendo este, un requisito. No ?

Lo que si no he entiendo es por que usaste ese basePath /modules/default, si haces esto... no autocargarías solo a partir del modulo default ? y los demás modulos ??

No he encontrado esto en el reference guide, quizá seria mejor echarle un ojo al API Doc y lo dicho... haré más pruebas en una aplicación creada de cero supongo.
  #5 (permalink)  
Antiguo 22/04/2010, 16:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Cierto, se me olvido mensionarlo tienes que cambiar el basePath y el namespace por el directorio donde esten tus cosas, en tu caso me supongo sería algo así:
Código PHP:
Ver original
  1. protected function _initResourceAutoloader()
  2. {
  3.       $resourceLoader = new Zend_Application_Module_Autoloader(array(
  4.            'basePath' => APPLICATION_PATH . '/modules/authentication',
  5.            'namespace' => 'Authentication',
  6.        ));
  7.  
  8.        return $resourceLoader;
  9. }

Saludos.
  #6 (permalink)  
Antiguo 22/04/2010, 17:19
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Funcionó !!

Pero entonces según la lógica de esto que me pasaste tendría que hacerse por cada modulo no ? Quizá excepto el Default...
Sabes si podría hacerse en la misma instancia a través de un array de arrays ?

Código PHP:
      protected function _initResourceAutoloader()
      {
            
$resourceLoader = new Zend_Application_Module_Autoloader(array(array(
                 
'basePath' => APPLICATION_PATH '/modules/authentication',
                 
'namespace' => 'Authentication',
             ), array(
                 
'basePath' => APPLICATION_PATH '/modules/blog',
                 
'namespace' => 'Blog',
             )));
             return 
$resourceLoader;
      } 
Muchas Gracias GatorV
  #7 (permalink)  
Antiguo 22/04/2010, 18:50
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Despues de un rato de haber respondido he pensado en que podía probarlo yo mismo ¬¬ ( Me di cuenta que comprobarlo no era para tanto ). Así que dupliqué la carpeta del modulo 'authentication' y lo renombré a 'authenticationn' con dos n.
He puesto el bootstrap tal como digo en el post anterior y arroja la siguiente exception... Supongo por que no es lo que el loader espera de mi jajaja :)

Cita:
Fatal error: Uncaught exception 'Zend_Loader_Exception' with message 'Resource loader requires both a namespace and a base path for initialization' in C:\xampp\php\PEAR\Zend\Loader\Autoloader\Resource. php:85 Stack trace: #0 C:\xampp\php\PEAR\Zend\Application\Module\Autoload er.php(45): Zend_Loader_Autoloader_Resource->__construct(Array) #1 C:\xampp\htdocs\zf\application1\application\Bootst rap.php(10): Zend_Application_Module_Autoloader->__construct(Array) #2 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(662): Bootstrap->_initResourceAutoloader() #3 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(615): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('resourceautoloa...') #4 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(579): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL) #5 C:\xampp\php\PEAR\Zend\Application.php(347): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap(NULL) #6 C:\xampp\htdocs\zf\application1\public\index.php(2 5) in C:\xampp\php\PEAR\Zend\Loader\Autoloader\Resource. php on line 85
  #8 (permalink)  
Antiguo 23/04/2010, 08:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Lo que pasa es que no se puede hacer eso que propones, pero la ventaja es que tienes la POO a tu disposición y siempre podrías hacer algo así:
Código PHP:
Ver original
  1. class My_Resource_Loaders
  2. {
  3.           public function __construct($loaders)
  4.           {
  5.                    foreach ($loaders as $module) {
  6.                             $loader = new Zend_Application_Module_Autoloader($module);
  7.                    }
  8.           }
  9. }

Saludos.
  #9 (permalink)  
Antiguo 23/04/2010, 09:24
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3

Genial GatorV,

Yo había pensado en crear varias instancias del Zend_Application_Module_Autoloader a mano por separado, al final es lo mismo... Pero le has añadido buenas prácticas con esa más que sencilla y obvia clase.

Doy el tema por solucionado :D
Gracias de nuevo !!
  #10 (permalink)  
Antiguo 30/04/2010, 10:56
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Hola amigos otra vez aca con el mismo problema que yoguuu, hice la prueba con lo q menciona Vgator y nada no puedo resolverlo, mi bootstrap lo tengo asi:


Código PHP:
<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

public function 
_initAutoload() {

        
$autoloader = new Zend_Application_Module_Autoloader(array(
                                
'namespace' => '',
                                
'basePath' => dirname(__FILE__) . '/modules/default'

        
));
        
$this->_auth Zend_Auth::getInstance();

        return 
$autoloader;
    }

    function 
_initViewHelpers() {
        
$this->bootstrap('layout');
        
$layout $this->getResource('layout');
        
$view $layout->getView();

        
$view->setHelperPath(APPLICATION_PATH.'/helpers''');

        
$view->doctype('HTML4_STRICT');
        
$view->headMeta()->appendHttpEquiv('Content-type''text/html;charset=utf-8, encoding=utf-8')
                        ->
appendName('description''Using view helpers in Zend_view');

        
$view->headTitle()->setSeparator(' - ')
             ->
headTitle('titulo');

        

        
    }

        protected function 
_initView()
    {
        
$view = new Zend_View();
        
// más inicialización...

        
return $view;
    }

        protected function 
_initPlugins(){
        
$this->bootstrap('frontController');

        
$plugin = new My_LayoutPlugin();
                
$this->frontController->registerPlugin($plugin);
               
    }

   
      protected function 
_initResourceAutoloader()
   
      {
   
            
$resourceLoader = new Zend_Application_Module_Autoloader(array(
                        
'basePath' => APPLICATION_PATH '/modules/admin',
                  
'namespace' => 'Admin',
                ));
   
         
             return 
$resourceLoader;
   
      }
}
Esta bien asi mi archivo o tengo que sacar el _initAutoload() y quedarme solo con el_initResourceAutoloader().

Gracias por su ayuda.
  #11 (permalink)  
Antiguo 30/04/2010, 11:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Se ve bien el autoloader, que error te da?

Saludos.
  #12 (permalink)  
Antiguo 30/04/2010, 11:12
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

cuando no ponia el _initResourceAutoloader() me salia:

Fatal error: Class 'Admin_Form_LoginForm' not found in C:\wamp\www\jg3_v0.1\application\modules\admin\con trollers\IndexController.php on line 16

donde Admin_Form_LoginForm es una calse dentro del application/modules/admin/forms/LoginForm.php

y ahora que lo pongo me redirige al modulo default pero ya no me muestra el error.

Que sera???

Gracias
  #13 (permalink)  
Antiguo 30/04/2010, 11:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Si te redirige ya no es problema del Autoloader si no de alguna otra parte de tu código.

Saludos.
  #14 (permalink)  
Antiguo 30/04/2010, 11:17
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Gracias gatorV por tu ayuda, voy a revisar el codigo y te comento luego; pero; ¿por que sucede esto? cuando usaba el zend 1.8 no hubo este problema, y mi path sigue siendo el mismo no cambie nada de las variables.

Espero tus comentarios.

Gracias.

saludos
  #15 (permalink)  
Antiguo 30/04/2010, 12:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemita con Module Autoload Zend Framework 1.10.3 : [Solucionado]

Desconozco la causa del problema sin conocer tu sistema.

Saludos.

Etiquetas: framework, solucionado
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 13:21.