Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Archivo .ini por modulo

Estas en el tema de Archivo .ini por modulo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola me gustaria saber como puedo hacer lo siguiente, Tengo el archivo .ini general de la aplicacion pero quiero que cada vez que entre en ...
  #1 (permalink)  
Antiguo 19/06/2011, 09:57
 
Fecha de Ingreso: mayo-2011
Mensajes: 256
Antigüedad: 13 años, 7 meses
Puntos: 5
Archivo .ini por modulo

Hola me gustaria saber como puedo hacer lo siguiente, Tengo el archivo .ini general de la aplicacion pero quiero que cada vez que entre en un modulo, este modulo tenga una carpeta config , donde hay un application.ini especifico para este modulo , por ejemplo que aparte de la configuracion general

Este seria el ini general .
Código:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""


resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
 autoloaderNamespaces[] = "My_"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Este seria el ini del admin
Código:
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts"
admin.resources.layout.layout = layout
Un saludo
  #2 (permalink)  
Antiguo 19/06/2011, 10:12
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: Archivo .ini por modulo

Que tal phpdevelopment,

Lo mas simple es que en el Bootstrap de cada modulo cargues el config correspondiente, lo que no tiene mucho sentido es anteponerle a cada key el modulo.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 19/06/2011, 10:29
 
Fecha de Ingreso: mayo-2011
Mensajes: 256
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Archivo .ini por modulo

Pero va a haber un .ini que va a ser comun a todos los modulos y si cargo ese .ini por modulo perderia el general.
Lo que tu propones, sino entendido mal, es que la aplicacion no carge el ini general y que los cargen los modulos, aunque tenga que repertir parte de esa configuracion en todos los archivos de configuracion, no hay una manera de agregar al ini general especificaciones para cada modulo

Última edición por phpdevelopment; 19/06/2011 a las 10:30 Razón: mejora
  #4 (permalink)  
Antiguo 19/06/2011, 10:38
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: Archivo .ini por modulo

No, lo que yo te digo es que ademas del config principal cargues el config de cada modulo, después podes hacer lo que necesites, guardar el config del modulo en otra key del Registry, o hacer un merge con el config principal.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 19/06/2011, 11:27
 
Fecha de Ingreso: mayo-2011
Mensajes: 256
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Archivo .ini por modulo

Pues esto es lo que pongo y no consigo hacer el merge ...

Código PHP:
Ver original
  1. $default_conf = new Zend_Config_Ini( APPLICATION_PATH .'/configs/application.ini',APPLICATION_ENV );
  2.         Zend_Registry::set('default_conf',$default_conf);
  3.  
  4. $config_admin = new Zend_Config_Ini( APPLICATION_PATH .'/modules/admin/configs/config.ini',APPLICATION_ENV );
  5.         $default_conf = Zend_Registry::get('default_conf');
  6.         $config_admin->merge(new Zend_Config($default_conf));
He probado de varias maneras pero me sale errores..

Seguire buscando
  #6 (permalink)  
Antiguo 19/06/2011, 11:41
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: Archivo .ini por modulo

Primero, creo que debería ser:
Código PHP:
Ver original
  1. $default_conf = new Zend_Config_Ini(
  2.                                     APPLICATION_PATH . '/configs/application.ini',
  3.                                     APPLICATION_ENV);
  4. Zend_Registry::set('default_conf', $default_conf);
  5.  
  6. $config_admin = new Zend_Config_Ini(
  7.                                     APPLICATION_PATH . '/modules/admin/configs/config.ini',
  8.                                     APPLICATION_ENV);
  9. $default_conf = Zend_Registry::get('default_conf');
  10. $config_admin->merge($default_conf);

segundo, que error te muestra ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 19/06/2011, 11:57
 
Fecha de Ingreso: mayo-2011
Mensajes: 256
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Archivo .ini por modulo

Con ese codigo que has puesto suelta este error:

Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'Zend_Config is read only'

Que ya me habia dado a mi tambien
  #8 (permalink)  
Antiguo 19/06/2011, 12:09
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: Archivo .ini por modulo

Ah si me falto el tercer parámetro a true en Zend_Config_Ini sino es read-only,

Código PHP:
Ver original
  1. $default_conf = new Zend_Config_Ini(
  2.                                     APPLICATION_PATH . '/configs/application.ini',
  3.                                     APPLICATION_ENV);
  4. Zend_Registry::set('default_conf', $default_conf);
  5.  
  6. $config_admin = new Zend_Config_Ini(
  7.                                     APPLICATION_PATH . '/modules/admin/configs/config.ini',
  8.                                     APPLICATION_ENV,
  9.                                     true);
  10. $default_conf = Zend_Registry::get('default_conf');
  11. $config_admin->merge($default_conf);
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 19/06/2011, 12:27
 
Fecha de Ingreso: mayo-2011
Mensajes: 256
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Archivo .ini por modulo

Ya parece que funciona , aunque la idea principal , era para poder hacer un layout para cada modulo.
Ahora el problema es el siguiente.

Esta clase me genera un layout para cada modulo

Código PHP:
class My_Layout extends Zend_Controller_Plugin_Abstract {

    
/**
     * Array of layout paths associating modules with layouts
     */
    
protected $_moduleLayouts;

    
/**
     * Registers a module layout.
     * This layout will be rendered when the specified module is called.
     * If there is no layout registered for the current module, the default layout as specified
     * in Zend_Layout will be rendered
     *
     * @param String $module        The name of the module
     * @param String $layoutPath    The path to the layout
     * @param String $layout        The name of the layout to render
     */
    
public function registerModuleLayout($module$layoutPath$layout=null){
        
$this->_moduleLayouts[$module] = array(
            
'layoutPath' => $layoutPath,
            
'layout' => $layout
        
);
  }

    public function 
preDispatch(Zend_Controller_Request_Abstract $request){
        if(isset(
$this->_moduleLayouts[$request->getModuleName()])){
            
$config $this->_moduleLayouts[$request->getModuleName()];


            
$layout Zend_Layout::getMvcInstance();
            if(
$layout->getMvcEnabled()){
                
$layout->setLayoutPath($config['layoutPath']);

                if(
$config['layout'] !== null){
                    
$layout->setLayout($config['layout']);
                }
            }
        }
    }


Mi .ini es el siguiente.el del general

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"
appnamespace "Application"
resources.frontController.controllerDirectory APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions 0


resources
.frontController.moduleDirectory APPLICATION_PATH "/modules"
resources.modules[] = ""


 
autoloaderNamespaces[] = "My_"

[staging production]

[
testing production]
phpSettings.display_startup_errors 1
phpSettings
.display_errors 1

[development production]
phpSettings.display_startup_errors 1
phpSettings
.display_errors 1
resources
.frontController.params.displayExceptions 
el ini del modulo admi es
Código PHP:
[production]


resources.layout.layout "admin"
resources.layout.layoutPath APPLICATION_PATH "/modules/admin/layouts"


[staging production]

[
testing production]
phpSettings.display_startup_errors 1
phpSettings
.display_errors 1

[development production]
phpSettings.display_startup_errors 1
phpSettings
.display_errors 1
resources
.frontController.params.displayExceptions 
Y el layout que esta en admin. es el siguiente.

Código PHP:
<?php echo $this->doctype(); ?>
<html>
<head>
</head>
<body>
<div class="header">
</div>
<div class="content">

<?php echo $this->layout()->content?>
</div>
<div class="footer">
</div>
</body>
</html>
Pues la salida del html es:
Código HTML:
<html><head></head><body>Esto es el admin</body></html> 
Cuando deberia ser:

Código HTML:
<html><head></head><body><div class="header">
</div>
<div class="content">
Esto es el admin</body></html>
</div>
<div class="footer">
</div> 
Sabes a que se puede deber este error, se me escapa algo....

Última edición por phpdevelopment; 19/06/2011 a las 12:28 Razón: actualizar

Etiquetas: ini, modulo
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 01:00.