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

Problema con modelo en Zend Framework

Estas en el tema de Problema con modelo en Zend Framework en el foro de Zend en Foros del Web. Amigos estoy implementando un modelo (sistema modular en ZF version 1.8.4) El Bootstrap: Código PHP: class  Bootstrap  extends  Zend_Application_Bootstrap_Bootstrap { protected function  _initAutolad ()     {          ...
  #1 (permalink)  
Antiguo 30/07/2009, 20:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 178
Antigüedad: 16 años, 4 meses
Puntos: 1
Problema con modelo en Zend Framework

Amigos estoy implementando un modelo (sistema modular en ZF version 1.8.4)

El Bootstrap:
Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

protected function 
_initAutolad()
    {
        
$autoloader = new Zend_Application_Module_Autoloader(array(
            
'namespace' => 'Default',
            
'basePath' => dirname(__FILE__)
            
        ));
        return 
$autoloader;
    }  
    

en Autos.php (el modelo)
Código PHP:
class Moduno_Model_Autos extends Zend_Db_Table_Abstract    
{
protected 
$_name 'autos';
protected 
$_primary 'id';

function 
vertodos(){
        
   
$prima $this->fetchAll();
   return 
$prima;
          
        }

En el indexController del modulo Moduno:
Código PHP:
class Moduno_IndexController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
// action body
    
}

    public function 
segundoAction()
    {
        
$todoslosautos=new Moduno_Model_Autos();
        
$this->view->todos=$todoslosautos->vertodos();
    }

El error que sale es:
Fatal error: Class 'Moduno_Model_Autos' not found in C:\wamp\www\Zendf\miproyecto\application\modules\m oduno\controllers\IndexController.php on line 18
Entiendo que no encuentra la clase pero no se porque.
En el application.ini tengo en lo que concierne a base de datos.
Código PHP:
# Database
resources.db.adapter "pdo_mysql"
resources.db.params.host "localhost"
resources.db.params.username "user"
resources.db.params.password "pass"
resources.db.params.dbname "basedos"
resources.db.isDefaultTableAdapter true 
La verdad no tengo mucha practica despues del cambio de la version 1.8, he mirado algunos manuales y no me doy cuenta que es lo que está mal.
  #2 (permalink)  
Antiguo 30/07/2009, 21:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

A la hora de hacer Moduno estas declarando que pertenece a otro modulo, por lo que vas a tener que crear un segundo Bootstrap en la carpeta de tu modelo y especificarle ahi el autoloader para ese modulo.

Saludos.
  #3 (permalink)  
Antiguo 31/07/2009, 07:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 178
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Problema con modelo en Zend Framework

Ahh!
Gracias maestro, como siempre.

Pregunto: En cada modulo hay que crear un bootstrap? no se pueden declarar todos los modulos en el bootstrap principal de la aplicacion?

Saludos.

Última edición por grey; 31/07/2009 a las 07:50
  #4 (permalink)  
Antiguo 31/07/2009, 08:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

No es necesario, lo puedes hacer dentro del bootstrap principal, solo especificale la ruta, por ejemplo:
Código PHP:
Ver original
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3.  
  4. protected function _initAutolad()
  5.     {
  6.         $autoloader = new Zend_Application_Module_Autoloader(array(
  7.             'namespace' => 'Default',
  8.             'basePath' => dirname(__FILE__)
  9.            
  10.         ));
  11.         return $autoloader;
  12.     }  
  13.     protected function _initAutoloaderModuno() {
  14.          $autoloader = new Zend_Application_Module_Autoloader(array(
  15.             'namespace' => 'Moduno',
  16.             'basePath' => dirname(__FILE__) . '/modules/moduno/'
  17.            
  18.         ));
  19.         return $autoloader;
  20.      }
  21. }

Saludos.
  #5 (permalink)  
Antiguo 31/07/2009, 14:15
 
Fecha de Ingreso: junio-2009
Mensajes: 156
Antigüedad: 14 años, 10 meses
Puntos: 3
Respuesta: Problema con modelo en Zend Framework

Hola amigos.
No sería mejor tener un bootstrap en cada modulo, asi no recargamos tanto el boostrap principal?
O sea, no cargamos nada que no vayamos a utilizar, o quizas la sobrecarga es minima y no influye.
Si me pueden despejar esta duda les agradezco.
Saludos Ramón.
  #6 (permalink)  
Antiguo 31/07/2009, 14:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

Todos los bootstraps de los modulos son procesados independientemente de si entras o no a un modulo, así que tenerlos en el principal o en submodulos no influye en nada.

Saludos.
  #7 (permalink)  
Antiguo 30/09/2009, 17:26
 
Fecha de Ingreso: noviembre-2007
Mensajes: 40
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problema con modelo en Zend Framework

Hola compañeros.

he estado siguiendo los pasos de un blog para crear un sistema modularizado.

En este blog indican que para poder modularizar el sistema debemos agregar al bootstrap la configuracion del frontontroller, para este ejemplo seria algo asi

Código PHP:
$frontController Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory(array(
                                                      
'default'=>'application/controllers',
                                                      
'admin'=>'application/moduno/controllers')); 
en este caso como se configuraria el frontcontroller?? quedaria asi?

Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
 
protected function 
_initAutolad()
    {
        
$autoloader = new Zend_Application_Module_Autoloader(array(
            
'namespace' => 'Default',
            
'basePath' => dirname(__FILE__)
            
        ));

        
$frontController Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory(array(
                                                      
'default'=>'application/controllers',
                                                      
'admin'=>'application/moduno'));

        return 
$autoloader;
    }  
    protected function 
_initAutoloaderModuno() {
         
$autoloader = new Zend_Application_Module_Autoloader(array(
            
'namespace' => 'Moduno',
            
'basePath' => dirname(__FILE__) . '/modules/moduno/'
            
        
));
       
        
$frontController Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory(array(
                                                      
'default'=>'application/controllers',
                                                      
'admin'=>application/moduno
        
        
return $autoloader;
     }

  #8 (permalink)  
Antiguo 30/09/2009, 21:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

No, solo es necesario en el application.ini agregar la linea:
Código:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
Para que reconozca que en la carpeta modules estan los modulos.

Saludos.
  #9 (permalink)  
Antiguo 01/10/2009, 14:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 40
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problema con modelo en Zend Framework

Cita:
Iniciado por GatorV Ver Mensaje
No, solo es necesario en el application.ini agregar la linea:
Código:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
Para que reconozca que en la carpeta modules estan los modulos.

Saludos.
Edito

gracias por tu ayuda. lo que pasa es que no tengo los modulos en la carpeta modules sino en la raiz, pero leyendo el manual de Zend entiendo por que es mejor almacenar los modulos en un solo lugar y poder utilizar moduleDirectory.

gracias

Última edición por kamilord; 01/10/2009 a las 15:21 Razón: Comprendi bien el por que la explicacion de Gatorv
  #10 (permalink)  
Antiguo 01/10/2009, 15:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

No, ya que esa linea lo que hace es activar el plugin Zend_Application_Resource_Modules, en ese caso vas a tener que hacerlo en otro método _initAppModules o algo por el estilo y ahí inyectar los modulos.

Es importante que respetes el orden de los bootstraps, así que no uses el singleton para traer el frontController, usa esto:
Código PHP:
Ver original
  1. public function _initAppModules()
  2. {
  3.          $this->bootstrap('frontController');
  4.          $front = $this->getResource('frontController');
  5.          // aqui agregas las rutas
  6. }

Saludos.
  #11 (permalink)  
Antiguo 01/10/2009, 20:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 40
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problema con modelo en Zend Framework

Gracias GatorV, pero sigo teniendo el mismo problema que mi compañero, dice que no encuentra la clase.

Mira mi proyecto esta asi.




Mi application.ini, le agrege lo que recomendaste el moduleDirectory

Código PHP:
includePaths.library APPLICATION_PATH "./lib"
bootstrap.path APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.moduleDirectory APPLICATION_PATH "/modules"
resources.layout.layoutPath APPLICATION_PATH "/layouts/" 
Cuando intento utilizar una clase de la carpeta models me dice que no encuentra la clase.


en el bootstrap tengo

Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

     protected function 
_initAutoload()
    {
         
//Antes lo tenia con Zend_Application_Module_Autoloader, pero lo quite despues de poner el moduleDirectory en el .ini
    
}

    protected function 
_initDoctype()
    {
        
$this->bootstrap('view');
        
$view $this->getResource('view');
        
$view->doctype('XHTML1_STRICT');
    }


he intentado varias cosas pero no doy con la solucion, muchas gracias.
  #12 (permalink)  
Antiguo 02/10/2009, 09:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

Una cosa es el autoloader para cargar las clases, y otra cosa totalmente distinta es la carpeta a los modules de tu proyecto.

Ambas cosas son necesarias, ya que se complementan. No debes de quitar el autoloader porque por eso ya no encuentra las clases al hacer el new.

Saludos.
  #13 (permalink)  
Antiguo 02/10/2009, 10:12
 
Fecha de Ingreso: noviembre-2007
Mensajes: 40
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problema con modelo en Zend Framework

Ah ok, muchas gracias....Igual me funciono cuando puse

Código:
resources.modules[] = ""
en el .ini, es decir...quedo asi.

Código:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""
pero que raro, no fue necesario ponerle de nuevo el autoloader y me funciono, afectara en algo mas adelante?

gracias GatorV, cuando sea grande quiero ser como tu, jeje es broma, pero en verdad sabes muchas cosas y siempre estas ayudando a toda la comunidad. gracias
  #14 (permalink)  
Antiguo 02/10/2009, 10:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

Lo que pasa es que el Module Bootloader ya tiene un Autoloader por defecto (ve el archivo Zend/Application/Module/Bootstrap.php)

Tu al poner en el php.ini resources.modules[] = "" activas este resourceloader que ya trae el autoloader.

Gracias por los comentarios, el chiste es leer muy bien la documentación del sistema que uses

Saludos.
  #15 (permalink)  
Antiguo 05/10/2009, 17:55
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Hola la verdad es que no tengo mucha practica en la utilizacion de Zend Framework version 1.9, he mirado algunos manuales y resulta un poco complicados,

Por que es mejor tener los módulos en la carpeta "modules" y no en la raiz.

Gracias por su atención Espero su respuesta.

Tengo un modulo de Services, este es el controller

Código PHP:
class Services_IndexController extends Zend_Controller_Action
{
    
/**
     * The default action - show the home page
     */
    
public static function indexAction() {
28        $this->view->title 'Gestión de Servicios';      
    }
    

Al ejecutarlo me devuelve el siguiente error

Código HTML:
Fatal error: Using $this when not in object context in 
C:\xampp\htdocs\portal\application\services\controllers\IndexController.php on line 28
Cuando todavia no implementaba la estructura modular funcionaba y podia utilizarlo en mi view.
Recien estoy iniciando en el camino del Zend espero su pronta respuesta.

Saludos a todos.

Última edición por GatorV; 05/10/2009 a las 21:18
  #16 (permalink)  
Antiguo 05/10/2009, 21:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

Porque defines como estática la función? Si la vas a mandar llamar vía el frontController tienes que usarlo como public sin ser static ya que se instancia un objeto de tu controller por el frontController.

Saludos.
  #17 (permalink)  
Antiguo 06/10/2009, 10:21
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Problema con modelo en Zend Framework

gracias, la verdad es que estaba perdido
y por que es mejor tener los módulos en la carpeta "modules" y no en la raiz.

nuevamente muchas gracias por colaborar con los que tienen problemas con zend framework
  #18 (permalink)  
Antiguo 06/10/2009, 13:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con modelo en Zend Framework

Pues porque si no confundirias los controllers si los pones en la carpeta raiz, no podrías diferenciar un module de otro...
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:50.