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

Automatizar routes en ZF

Estas en el tema de Automatizar routes en ZF en el foro de Zend en Foros del Web. Hola compas :D Tengo unos routers seteados en el bootstrap (a mano) y quisiera saber si ustedes tienen alguna idea de como se pueden automatizar ...
  #1 (permalink)  
Antiguo 27/04/2011, 13:25
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 7 meses
Puntos: 60
Automatizar routes en ZF

Hola compas :D

Tengo unos routers seteados en el bootstrap (a mano) y quisiera saber si ustedes tienen alguna idea de como se pueden automatizar por medio de mmm no sé un XML o algún archivo de config..

Código PHP:
$router Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route_Static(
    
'ixe',
    array(
'controller' => 'portal''action' => 'index''cliente' =>'ixe')
);
$route2 = new Zend_Controller_Router_Route_Static(
    
'qualitas',
    array(
'controller' => 'portal''action' => 'index''cliente' =>'qualitas')
);
$route3 = new Zend_Controller_Router_Route_Static(
    
'alsea',
    array(
'controller' => 'portal''action' => 'index''cliente' =>'alsea')
);
$router->addRoute('ixe'$route);
$router->addRoute('qualitas'$route2);
$router->addRoute('alsea'$route3); 
Ya que como ven es algo muy redundante ya que lo unico variable en realidad es una palabra todo lo demás es igual

Código PHP:
$route3 = new Zend_Controller_Router_Route_Static(
    
'VARIABLE',
    array(
'controller' => 'portal''action' => 'index''cliente' =>'VARIABLE')
); 

¿Alguna idea?

__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #2 (permalink)  
Antiguo 27/04/2011, 13: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: Automatizar routes en ZF

Que tal _ssx,

Que conocimientos tenes de Zend ?, , es broma, acordate que hay un resource para el router.
Y si utilizas static, no puede haber secciones dinámicas, lo bueno de static es la velocidad, lo malo, lo dice justamente el nombre, es estático, para hacerlo dinámico deberías utilizar otro router.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 27/04/2011, 14:22
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 7 meses
Puntos: 60
Respuesta: Automatizar routes en ZF

Cita:
Que conocimientos tenes de Zend ?
No tantos

Lo que pasa es que es un proyecto en Zend 1.7 y aun no existia Zend_Application
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #4 (permalink)  
Antiguo 27/04/2011, 14:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Automatizar routes en ZF

y ¿porque no usas una ruta dinámica?:
Código PHP:
Ver original
  1. $route = new Zend_Controller_Router_Route(':cliente', array('controller' => 'portal', 'action' => 'index'));
  2. $router->addRoute('clientes', $route);

Saludos.
  #5 (permalink)  
Antiguo 27/04/2011, 14:49
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: Automatizar routes en ZF

Bueno, en ese caso create un plugin que siga la misma logica del resource.
Pasale vía constructor la configuración, parseala e instancia los routers, luego accedes al router por defecto a través del frontController y seteas las rutas nuevas.

La configuración debería seguir la estructura actual, así, si en algún momento actualizan el FW, los cambios son mínimos.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 27/04/2011, 15:01
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 7 meses
Puntos: 60
Respuesta: Automatizar routes en ZF

Cita:
Iniciado por GatorV Ver Mensaje
y ¿porque no usas una ruta dinámica?:
Código PHP:
Ver original
  1. $route = new Zend_Controller_Router_Route(':cliente', array('controller' => 'portal', 'action' => 'index'));
  2. $router->addRoute('clientes', $route);

Saludos.
Esta opción funciona no obstante los controladores y modulos caen sobre este route y se van al controlador "portal" seteado en el route, ¿hay alguna forma de que el route solo funcione cuando NO existe un controlador por defecto o un modulo?



Muchas gracias.
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #7 (permalink)  
Antiguo 27/04/2011, 16:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Automatizar routes en ZF

El problema de usar una ruta tan corta es ese, lo mejor sería que tu ruta fuera por ejemplo /clientes/:cliente de esa forma separas la ruta por defecto y no te encuentras por problemas así.

Saludos.
  #8 (permalink)  
Antiguo 26/05/2011, 12:52
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 7 meses
Puntos: 60
Respuesta: Automatizar routes en ZF

Bueno pues al final del día opte por hacer un objeto Routes que lea un XML y setee las rutas en el bootstrap

Código PHP:
<?php

class Routes extends DOMDocument {

    protected 
$_source;
    protected 
$_filePath;
    private 
$_routes;

    public function 
__construct($filename) {
        
$this->_filePath $filename;
        
parent::__construct($version$encoding);
        
$this->formatOutput true;
        
$this->preservWhiteSpace true;
        
$this->load($filename);
    }

    public function 
load($filename) {
        
parent::load($filename);
        
$this->parse();
    }

    public function 
add($id$name) {
        
$padre $this->createElement("route");
        
$padre->setAttribute('xml:id'$id);
        
$inner $this->createElement('cliente'$name);
        
$this->firstChild->appendChild($padre);
        
$padre->appendChild($inner);
        
$this->save($this->_filePath);
    }

    public function 
remove($id) {
        
$elemento $this->getElementById($id);
        if(
is_object($elemento)){
            
$this->deleteNode($elemento);
            return 
$this->save($this->_filePath);
        }else{
            return 
false;
        }
    }

    public function 
parse() {
        if (
$this->firstChild->hasChildNodes()) {
            foreach (
$this->firstChild->childNodes as $ruta) {
                if (
trim($ruta->nodeValue) != '')
                    
$this->_routes[] = $ruta->nodeValue;
            }
        }
    }

    function 
deleteNode($node) {
        
$this->deleteChildren($node);
        
$parent $node->parentNode;
        
$oldnode $parent->removeChild($node);
    }

    function 
deleteChildren($node) {
        while (isset(
$node->firstChild)) {
            
$this->deleteChildren($node->firstChild);
            
$node->removeChild($node->firstChild);
        }
    }

    public function 
get() {
        return 
$this->_routes;
    }

}
Y en un metodo init del Bootstrap

Código PHP:
$routesXml = new Routes(Base::getConfig()->xml->routes);
if(
count($routesXml->get())>0)
foreach(
$routesXml->get() as $cliente){
    
$route = new Zend_Controller_Router_Route_Static
    
$cliente
    array(
'controller' => 'portal''action' => 'index''cliente' =>$cliente)
); 
    
$router->addRoute($cliente$route); 

gracias :D compas
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #9 (permalink)  
Antiguo 26/05/2011, 13:52
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: Automatizar routes en ZF

Que tal _ssx,

Gracias por compartir, te dejo unos comentarios, me parece que tenes un par de typos, en el constructor las variables $version y $encoding no estan definidas, supongo que seria algo asi:

Código PHP:
Ver original
  1. public function __construct($filename, $version = '1.0', $encoding = 'UTF-8')
  2. {
  3.     $this->_filePath = $filename;
  4.     parent::__construct($version, $encoding);
  5.     ...
  6. }

a deleteNode y deleteChildren les falta la visibilidad.

Y te hago un par de sugerencias, controlar que el fichero exista e implementar Iterator + Countable o IteratorAggregate, con lo cual podrías hacer:

Código PHP:
Ver original
  1. $routesXml = new Routes(Base::getConfig()->xml->routes);
  2.  
  3. foreach($routesXml as $cliente) {
  4.     $route = new Zend_Controller_Router_Route_Static(  
  5.             $cliente,  
  6.             array(
  7.                 'controller' => 'portal',
  8.                 'action'  => 'index',
  9.                 'cliente' => $cliente
  10.             )
  11.     );  
  12.     $router->addRoute($cliente, $route);  
  13. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: automatizar, frameworks-y-php-orientado-a-objetos
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 10:05.