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

PHP OO Como pasar varios parametros a una accion de un controlador

Estas en el tema de Como pasar varios parametros a una accion de un controlador en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas he estado trabajando un poco y trabajando mis clases para que sean con MVC y me surge esta duda que le he dado a ...
  #1 (permalink)  
Antiguo 07/04/2011, 21:26
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Como pasar varios parametros a una accion de un controlador

Buenas he estado trabajando un poco y trabajando mis clases para que sean con MVC y me surge esta duda que le he dado a la cabeza pero nada que se me ocurre, al grano en el router que tengo cuando llega el momento del llamado sin parametros lo hace de maravilla
Código PHP:
Ver original
  1. $controllerInst->$accion();
pero como indicarle a un router los parametros que se indican en la url, por ejemplo digamos que quiero pasarle el parametro a una funcion de actualizacion de usuarios eje
Código PHP:
Ver original
  1. public function actualizar($user){
  2. }
como haria para poder leer este parametro??
lo habia pensado de esta manera aunque no es muy ortodoxa ni dio el resultado esperado
Código PHP:
Ver original
  1. if(count($_GET) > 2){
  2.         foreach($_GET as $key => $value){
  3.             if($key != "controller" && $key != "action"){
  4.                 $parametro = $value;
  5.         }  
  6.     }
  7. }
  8.  
  9. /*al momento de llamar a la accion*/
  10. if(isset($parametros)){                            
  11.                 $controllerInst->$accion($parametro);
  12.             }
bueno como podran ver al igual solo estoy pasando un parametro pero que si quiero dos o mas?? he echo algunas pruebas y nada quise hasta forzarlos parametros haciendo algo como un implode por comas inventando pero al igual seguia siendo un solo parametro saludos y espero que me allan explicado bien, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #2 (permalink)  
Antiguo 07/04/2011, 21:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Como pasar varios parametros a una accion de un controlador

¿Que framework?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 07/04/2011, 22:39
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como pasar varios parametros a una accion de un controlador

Es un mini marco de trabajo que tengo con mis clases que lo estoy pasando a MVC, para hacer desarrollo en proyectos pequeños que no requieran tantas librerias como tienen la mayoria de los fw, hasta ahora habia trabajado la parte de insercion tranquilamente hasta que llege a la actualizacion de datos que es donde mayormente uno pide parametros por la url y ahi se me ha cerrado la mente
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 08/04/2011, 02:26
Avatar de historiasdemaria  
Fecha de Ingreso: septiembre-2010
Ubicación: www
Mensajes: 433
Antigüedad: 13 años, 7 meses
Puntos: 54
Respuesta: Como pasar varios parametros a una accion de un controlador

No entiendo muy bien,..
los parametros para actualizadcion de datos pueden venir por un POST, no? no necesariamente por la url..
Por que no harias un $_REQUEST en un array de parametros que pasarias al controller?
y aqui:

Código PHP:
Ver original
  1. $controllerInst->$accion($arrayParametros);




Una cosa buena que tienen los frameworks ya hechos, como Symfony y otros, es que te "fuerzan" a trabajar bien impidiendote cometer errores
  #5 (permalink)  
Antiguo 08/04/2011, 09:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como pasar varios parametros a una accion de un controlador

Amigo historiasdemaria, gracias por tu comentario, pero mi problema esta es en los parametros para los metodos de la funcion, los datos pasados por post los maneja el metodo en el controlador directamente, el parametro que se le pasa al metodo del controlador se le da por la url, en el ejemplo que te estoy diciendo de la actualizacion de usuarios la url es la siguiente
Cita:
index.php?controller=usuarios&action=actualizar&us er=carlos_belisario
si te fijas en la url solo indico el controlador, la accion y el usuario especifico sobre el que voy a hacer la accion, ahora los datos recibidos del formulario los proceso dentro del metodo actualizar, con esto
Cita:
$controllerInst->$accion($parametro);
lo que quiero es que en el archivo router pasar los parametros al metodo public function actualizar($user){, que en este caso funciona porque es uno solo, pero cuando son dos o mas parametros es que no he podido hacer para que lo trabaje, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 08/04/2011, 10:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Como pasar varios parametros a una accion de un controlador

Que tal carlos_belisario,

Hay algo que no entiendo, si tu router es capaz de darse cuenta cual es el controller y el action, como no puede parsear el resto de parámetros ?, en todo caso deberías postear el router.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 08/04/2011, 10:20
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como pasar varios parametros a una accion de un controlador

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal carlos_belisario,

Hay algo que no entiendo, si tu router es capaz de darse cuenta cual es el controller y el action, como no puede parsear el resto de parámetros ?, en todo caso deberías postear el router.

Saludos.
porque no he encontrado la manera de hacer que los obtenga solo logro que obtenga 1
Código PHP:
Ver original
  1. <?php
  2. class FrontController {
  3.     public static function Main() {    
  4.         $controllerDir = "controller/";
  5.         // Obtenemos el controlador y la accion    
  6.         if(isset($_GET['controller'])){
  7.             $controller = $_GET['controller'];
  8.         }
  9.         else{
  10.             $controller = "index";
  11.         }      
  12.         if(isset($_GET['action'])){
  13.                     $accion = $_GET['action'];
  14.         }      
  15.         else{
  16.             $accion = "index";
  17.         }  
  18. /**lo que hice anoche inventado loqueras*/ 
  19.         if(count($_GET) > 2){
  20.             foreach($_GET as $key => $value){
  21.                 if($key != "controller" && $key != "action"){
  22.                     $parametros[] = $value;
  23.                 }  
  24.             }
  25.         }
  26. /*lo que hice anoche inventado loqueras**/ 
  27.         $controllerFile = $controllerDir . $controller . "_controller.php";
  28.         if( !file_exists( $controllerFile ) ) { // Si no existe el archivo lanzamos una excepcion
  29.             throw new FrontControllerException( "No se encontro el archivo especificado" );
  30.         }
  31.         $controllerClass = $controller . "Controller";
  32.         if( class_exists( $controllerClass, false ) ) { // Si existe el archivo pero no esta la clase lanzamos otra excepcion
  33.             throw new FrontControllerException( "El controlador fue cargado pero no se encontro la clase" );
  34.         }
  35.         require_once($controllerFile); 
  36.         $controllerInst = new $controllerClass();      
  37.         if( !is_callable( array( $controllerInst, $accion ) ) ) { // Comprobamos si la accion es posible llamarla
  38.             throw new FrontControllerException( "El controlador no tiene definida la accion $accion" );
  39.         }
  40.         else {
  41. /**lo que hice anoche inventado loqueras*/ 
  42.             if(isset($parametros)){            
  43.                 $parm = implode(',',$parametros);
  44.                 $controllerInst->$accion($parm);
  45.             }
  46. /*lo que hice anoche inventado loqueras**/ 
  47.             else{
  48.                 $controllerInst->$accion(); // Llamamos a la accion y dejamos el proceso al controlador
  49.             }  
  50.         }
  51.     }
  52. }
  53. ?>
este es una clase FrontController que consegui hace tiempo leyendo sobre este patron, y funciona bien, de echo creo que solo modifique algunas cosas nada mas, y claro anoche haciendo pruebas hice lo de los paramtros que es lo que esta entre comentarios
Cita:
/**lo que hice anoche inventado loqueras*/
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 08/04/2011, 11:58
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: Como pasar varios parametros a una accion de un controlador

Hola,
mira, yo tengo el siguiente código en una clase mia, para poder armar url amigables a partir de una url de este estilo:

index.php?controlador=usuarios&accion=update&nombr e=pepe&apellido=pepa

me la convierte en:

usuario/update/nombre/pepe/apellido/papa

el codigo es el siguiente:
Código PHP:
Ver original
  1. /**
  2.          * setea los parametros de la url
  3.          * @version 0.1
  4.          * @author Lucas M. sastre
  5.          * @access private
  6.          * @name setParametros
  7.          *
  8.          * Modificaciones
  9.          */
  10.     private function setParametros($param) {
  11.             //limpio los parametros previos
  12.         $this->parametros = '';
  13.             //extraigo los parametros de la url general
  14.         $valores = explode('index.php?',$param);
  15.             //separo los paremtros ya sea por & o por &amp;
  16.             $amp = explode('&amp;',$valores[1]);
  17.             if(!empty($amp)){
  18.                 $valores = $amp;
  19.             }
  20.             else{
  21.                 $valores = explode('&',$valores[1]);
  22.             }
  23.  
  24.             //recorro los valores y voy armando la url
  25.         foreach ($valores as $key => $val) {
  26.         $segmento =  explode('=',$val);
  27.                 //valido si el primer segmento es el del lenguaje
  28.         if($segmento[0]!='leng') {
  29.                     //valido si el paremetro es el controlador
  30.             if($key=='controlador') {
  31.             $this->parametros .= strtolower(preg_replace('/([A-Z])/', '-$1',$segmento[1]))."/";
  32.             }
  33.                     //valido si segmento es el de la paginacion
  34.             elseif($segmento[0]=='verPagina'){
  35.             $this->parametros .= 'Pagina/'.$segmento[1]."/";
  36.             }
  37.                     //valido que el segmento sea distinto a id
  38.             elseif($key!='id') {
  39.             $acentos=array("á","é","í","ó","ú","ñ","Á","É","Í","Ó","Ú","Ñ");
  40.             $sinacentos=array("a","e","i","o","u","n","A","E","I","O","U","N");
  41.             $value=str_replace($acentos,$sinacentos,$segmento[1]);
  42.             $this->parametros .= preg_replace("@[^A-Za-z0-9-]+@i","-",$value)."/";
  43.             }
  44.         }
  45.         }
  46.     }

esto sirve en mi caso, pero para el tuyo, tal vez lo que tengas que hacer es obtener todo el query string que hay despues de la acción y armar un arreglo con eso identificando parametro y valor.
Puedes ver sino como lo hace codeigniter el tema de los segmentos de parametros.
Espero haberme explicado bien y que te sirva de algo.
  #9 (permalink)  
Antiguo 08/04/2011, 15:01
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como pasar varios parametros a una accion de un controlador

interesante trabajas las url amigables directo desd php??? no trabajas con .htaccess?? o entendi mal ( que pudiera ser lo mas seguro )
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #10 (permalink)  
Antiguo 10/04/2011, 13:46
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: Como pasar varios parametros a una accion de un controlador

Cita:
Iniciado por carlos_belisario Ver Mensaje
interesante trabajas las url amigables directo desd php??? no trabajas con .htaccess?? o entendi mal ( que pudiera ser lo mas seguro )
las trabajo con .htaccess lo que hace esa clase "traducir" una url comun a una url amigable en el html, por ejemplo:

yo puedo hacer esto:
Código HTML:
Ver original
  1. <a href="index.php?controlador=nombre&amp;accion=ver&amp;parametro1=valor1&amp;paremetro2=valor2">link</a>

con mi código si hago esto:
Código HTML:
Ver original
  1. <a href="<?php echo $url->urlAmigables(index.php?controlador=nombre&amp;accion=ver&amp;parametro1=valor1&amp;paremetro2=valor2);?>">link</a>

y cuando se muestre la vista en el navegador va a salir algo asi:
Código HTML:
Ver original
  1. <a href="index/controlador/accion/parametro1/valor1/parametro2/valor2">link</a>

obvio podria directamente escribir en el html esto:
Código HTML:
Ver original
  1. <a href="index/controlador/accion/parametro1/valor1/parametro2/valor2">link</a>

pero se complica cuando tengo una aplicación multilenguaje, con mi método comprueba automáticamente si la aplicacion tiene varios idiomas o no, y si los tiene agrega el parametro corresponiente por ejemplo:

Código HTML:
Ver original
  1. <a href="<?php echo $url->urlAmigables(index.php?controlador=nombre&amp;accion=ver&amp;parametro1=valor1&amp;paremetro2=valor2);?>">link</a>

si hay ingles y español mostraría segun el lenguaje seteado esto:
Código HTML:
Ver original
  1. <a href="es/index/controlador/accion/parametro1/valor1/parametro2/valor2">link</a>

con esto no digo que es la solución perfecta pero para lo que hago me sirve y mucho jeeje

Etiquetas: controlador, parametros, acciones
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 23:40.