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

implementar reglas de ruteo

Estas en el tema de implementar reglas de ruteo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo mi frontcontroller muy similar al que n nuestro compañero GatorV expone en su blog, googleando vi que la mayoría de los framework usan ...
  #1 (permalink)  
Antiguo 09/01/2010, 09:41
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
implementar reglas de ruteo

Hola,
tengo mi frontcontroller muy similar al que n nuestro compañero GatorV expone en su blog, googleando vi que la mayoría de los framework usan reglas de ruteo, lo cual me pareció muy interesante, el tema es que no logro ver como implementarlo con mi frontcontroller. Básicamente mi duda es si el ruteo lo tengo que hacer dentro de mi frontcontroller, por fuera del mismo, o directamente reescribir todo y que todas las entradas sean por medio del router. Espero que se haya entendido mi duda.
Salu2
  #2 (permalink)  
Antiguo 09/01/2010, 12:31
Avatar de pabx  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo, Uruguay
Mensajes: 16
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: implementar reglas de ruteo

Buenas,

Mi experiencia en temas de ruteo se basa en un framework que estoy implementando. Ahí un request no es recibido directamente por un controller si no que hay "alguien" que recibe en request, lo procesa y llama al controller correcto (dependiendo de la url), esto lo hace el paquete de ruteo. Un concejo: que la url no sea una ruta física a un controller (archivo php en tu servidor), si no que sea una ruta lógica que recibe el ruteador y la transforma a una ruta física para saber que controller debe ejecutar, por ejemplo en mi framework la url es así:

/dir_instalacion/component/controller/accion/params...

y los controllers están físicamente en /dir_instalacion/coponent/controllers/controller.php

Para darte una idea de lo que puedes hacer: http://www.simplewebportal.net/yupp_framework_php_doc/10_custom_url_mappings.html

Si no puedes directamente ver el codigo del framework: http://code.google.com/p/yupp/downloads/list

Saludos.
  #3 (permalink)  
Antiguo 09/01/2010, 14:04
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: implementar reglas de ruteo

pabx interesante lo estoy revisando, igual yo apuntaba ha algo como los otros frameworks, por ejemplo:
Código PHP:
Ver original
  1. $Route->connect ('/blog/:action/*', array('controller'=>'Blog', 'action'=>'index'));
donde yo pueda configurar por ejemplo que si la url es original:
misitio.com/controlador/accion/param1/param2/param3

y quiero mostrar misitio.com/controlador/accion/param3.html

mi frontcontroller sepa que hago referencia a controlador/accion/param1/param2/param3

he visto reglas que la url es
elsitio.com/blog/titulo_de_la_noticia.html
pero internamente redirige elsitio.com/index.php?controlador=blog&accion=ver&id=5&itulo=t itulo_de_la_noticia

Eso es mas o menos lo que ando buscando poder armar reglas de ruteo mostrando los parametros que quiera en los links html
  #4 (permalink)  
Antiguo 09/01/2010, 14:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: implementar reglas de ruteo

hablando de frameworks, yo he implementado algo así...

index.php/el-titulo-de-la-noticia-33.html
Código PHP:
// PHP 5.3
dispatch('%s-%d', function($titulo ''$id 0)
{
  echo 
$titulo// el-titulo-de-la-noticia
  
echo $id// 33
}): 
obviamente el router -la función- hace todo el trabajo de cambiar los wildcards en regex, tampoco es muy OOP que digamos.... pero el concepto no es muy distinto... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 09/01/2010, 17:44
Avatar de pabx  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo, Uruguay
Mensajes: 16
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: implementar reglas de ruteo

Hola!

Entiendo, el tema es que para definir reglas debes implementar la parte que las interpreta, los frameworks como dicen te dan la reglas para que las uses e internamente definen la implementación, no se si tu usas algún framework (por tu post pensé que no por eso te decía cómo es posible implementar esa lógica).

En esta página está como Yupp Framework define esas reglas: http://www.simplewebportal.net/yupp_framework_php_doc/10_custom_url_mappings.html

Si ves define como regla: $mapping = "/blog(\/.*(\/.*)?)?/";

Mientras el manejador:
function getLogicalRoute( $field_list )
{
return array('component' => $field_list[0],
'controlador' => (!isset($field_list[1])) ? 'entradaBlog' : $field_list[1],
'action' => (!isset($field_list[2])) ? 'list' : $field_list[2]);
}

Entonces lo que hace es que cualquier URL que empiece con "blog" (nombre del componente), ejecute la accion "list" del controller "entragaBlog". Igualmente se podria mejorar para hacerlo más simple.

De nuevo, si tu usas un framework esta implementacion ya la tendrás hecha y solo deberás definir las reglas de ruteo.

Por otro lado si tienes una URL: controlador/accion/param1/param2/param3
En Yupp, a controlador->accion() le llega como parámetro este array: _param_1=>param1, _param_2=>param2, .... etc.

Espero que te ayude.

Un saludo desde Uruguay!
Pablo.


Cita:
Iniciado por destor77 Ver Mensaje
pabx interesante lo estoy revisando, igual yo apuntaba ha algo como los otros frameworks, por ejemplo:
Código PHP:
Ver original
  1. $Route->connect ('/blog/:action/*', array('controller'=>'Blog', 'action'=>'index'));
donde yo pueda configurar por ejemplo que si la url es original:
misitio.com/controlador/accion/param1/param2/param3

y quiero mostrar misitio.com/controlador/accion/param3.html

mi frontcontroller sepa que hago referencia a controlador/accion/param1/param2/param3

he visto reglas que la url es
elsitio.com/blog/titulo_de_la_noticia.html
pero internamente redirige elsitio.com/index.php?controlador=blog&accion=ver&id=5&itulo=t itulo_de_la_noticia

Eso es mas o menos lo que ando buscando poder armar reglas de ruteo mostrando los parametros que quiera en los links html
  #6 (permalink)  
Antiguo 09/01/2010, 20:42
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: implementar reglas de ruteo

Cita:
no se si tu usas algún framework (por tu post pensé que no por eso te decía cómo es posible implementar esa lógica).
No estoy usando ningún framework, estoy armando mi aplicación o mini framework desde cero, y quiero ir mejorándolo poco a poco con cosas nuevas. Por eso la "necesidad" de saber como implementar router sin estar pegado a un framework.
  #7 (permalink)  
Antiguo 09/01/2010, 21:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: implementar reglas de ruteo

precisamente, los ejemplos deben motivarte a emplear tu creatividad...

aún así, no hay mucha diferencia en cuanto a como se implementa dicho procedimiento:

- puedes usar expresiones regulares
- puedes usar partes obtenidas de un explode()
- puedes utilizar todo lo que te venga a la mente, no hay limites!!

al final, todo debe ser convertido en información que fácilmente puedes emplear para conseguir los resultados que necesites... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 09/01/2010, 23:55
Avatar de pabx  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo, Uruguay
Mensajes: 16
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: implementar reglas de ruteo

Perfecto, entonces sin usar framework es más o menos como te decía, debes definir la sintaxis para expresar TUS propias reglas como más te convenga dentro de tu aplicación (considerando las URLs que tengas y las rutas físicas a los controllers que tengas).

Luego debes implementar el mecanismo de interpretación de dichas reglas, como bien dice el compañero pateketrueke, puedes usar regexps, o funciones de strings como explode, substring, str_split, etc, etc, lo que más se adapte a la aplicación que estás desarrollando, lo te quede más cómodo para trabajar y lo que sea más fácil para procesar la sintaxis que hayas definido para las reglas.

Etiquetas: implementar, reglas, ruteo
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 18:01.