Foros del Web » Programando para Internet » PHP »

MVC: control de argumentos validos

Estas en el tema de MVC: control de argumentos validos en el foro de PHP en Foros del Web. Buenas, queria consultar que tipo de diseño utilizan o si tienen un buen enlace que explique como controlar los argumentos que se le pasan a ...
  #1 (permalink)  
Antiguo 30/10/2013, 11:09
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Pregunta MVC: control de argumentos validos

Buenas, queria consultar que tipo de diseño utilizan o si tienen un buen enlace que explique como controlar los argumentos que se le pasan a un metodo.
Ya que si se supone que la "seccion X" de la pagina esta pensada para recibir solo "decir/hola", un usuario tranquilamente podria pasar una url "decir/hola/chau" y sin controlar los argumentos (en forma dinamica obviamente), el enlace "decir/hola/chau" podria andar dando vueltas por internet como un enlace valido.

Espero haberme explicado bien.

Saludos.
  #2 (permalink)  
Antiguo 30/10/2013, 13:47
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: MVC: control de argumentos validos

Mi no entender, pero la cantidad de parametros se la pones tu.
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 30/10/2013, 15:35
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: MVC: control de argumentos validos

Depende del framework o la implementacion MVC que estas utilizando.

Si la ruta que la gente pone no existe, entonces redirecciona al usuario hacia una pagina 404, y es realmente lo unico que puedes hacer.

Te daria una respuesta mas util si dijeras que framework estas utilizando, o si hiciste tu propio framework entonces la logica la tienes que poner en tu "front controller"
  #4 (permalink)  
Antiguo 30/10/2013, 16:51
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: MVC: control de argumentos validos

a ver pongo un ejemplo...

Código PHP:
Ver original
  1. $model = new Model();
  2. $controller = new Controller($model);
  3. $view = new View($controller, $model);
  4. if(isset($_GET['argument'])) $controller->change($_GET['argument']);

hasta ahi bien... ahora si "change" varia...

Código PHP:
Ver original
  1. $model = new Model();
  2. $controller = new Controller($model);
  3. $view = new View($controller, $model);
  4.  
  5. if(isset($_GET['method'])) $method= $_GET['method'];
  6. if(isset($_GET['argument'])) $arg = $_GET['argument'];
  7. $controller->$method($arg);

como se que el metodo que quiero ejecutar tiene para introducir argumentos..?

tal vez sea
Código PHP:
Ver original
  1. public function method() { ... }
y listo, el argumento que se pasa esta de mas y genera error..

la idea es buscar mayor dinamismo


Cita:
Iniciado por AlanChavez Ver Mensaje
Depende del framework o la implementacion MVC que estas utilizando.

Si la ruta que la gente pone no existe, entonces redirecciona al usuario hacia una pagina 404, y es realmente lo unico que puedes hacer.

Te daria una respuesta mas util si dijeras que framework estas utilizando, o si hiciste tu propio framework entonces la logica la tienes que poner en tu "front controller"
no estoy utilizando ningun framework, lamento decir que no se a que te referis con ""front controller"" :s


Saludos.
  #5 (permalink)  
Antiguo 31/10/2013, 11:01
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: MVC: control de argumentos validos

Ahi vi lo de Front Controller, sigue siendo la misma logica que MVC pero aplicada de otra manera, asi que el problema de si "el metodo pide argumento o no?" sigue estando.

Alguien que me tire un mano con temas para buscar aunque sea? O frameworks ya hechos que manejen bien esta parte? Tutos, explicaciones de los frameworks... cualquier cosa me viene bien.

Vi en varios Front Controllers el tema de Reflection, no se que tienen para decir al respecto sobre eso. Agradeceria opiniones o ideas sino.

Saludos.
  #6 (permalink)  
Antiguo 31/10/2013, 11:41
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: MVC: control de argumentos validos

Me parece que estas teniendo un error de conceptos o estas aplicando algo que no es mvc estrictamente hablando.

Código PHP:
Ver original
  1. $model = new Model();
  2. $controller = new Controller($model);
  3. $view = new View($controller, $model);
  4. if(isset($_GET['argument'])) $controller->change($_GET['argument']);

Este código de ejemplo que pusiste, me genera dudas en como estas implementando.
Porque pasarle el modelo a la vista?
Porque buscar los argumentos por fuera del controlador?

Explica un poco mas que intentas lograr o publica el código para entenderlo mas en algún repositorio.
  #7 (permalink)  
Antiguo 31/10/2013, 12:51
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: MVC: control de argumentos validos

Perdon pero, que tiene que ver eso con mi pregunta inicial? Si ese es un ejemplo hipotetico de MVC.. yo ni siquiera estoy haciendo un MVC(asi se maneja bien el modelo MVC, el controlador y la vista tienen que compartir el modelo, esa seria la forma correcta del MVC convencional que no se suele usar). Y ya explique que queria hacer..

si tengo esto
Código PHP:
Ver original
  1. $controller->$metodo($argumento)

y la funcion "$metodo" es..
Código PHP:
Ver original
  1. public function "$metodo"() { ... }
al no necesitar $argumento.. estoy generando un error.... estoy llamando a un metodo(public function "$metodo"() { ... }) con un argumento($metodo($argumento);) cuando no lo necesita...
  #8 (permalink)  
Antiguo 31/10/2013, 14:08
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: MVC: control de argumentos validos

Si lo que quieres es pasar los argumentos así, puedes usar call_user_func_array que te permite justamente eso, mandar llamar una función con una serie de argumentos, por ejemplo, si sabes que tus parámetros vienen en $_GET['controller'] y $_GET['action'] y el resto es son argumentos, puedes hacer algo así:
Código PHP:
Ver original
  1. <?php
  2. $controller = $_GET['controller'];
  3. unset($_GET['controller']);
  4. $action = $_GET['action'];
  5. unset($_GET['action']);
  6.  
  7. $controller = new $controller();
  8. call_user_func_array(array($controller, $action), $_GET);
  #9 (permalink)  
Antiguo 31/10/2013, 18:13
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: MVC: control de argumentos validos

edito todo, lo hago mas simple...


tengo una funcion..
Código PHP:
Ver original
  1. function Prueba()
  2. {
  3.     echo "funciona!";
  4. }
tranquilmanete Prueba puede pedir una variable (pero yo no lo se porque lo quiero hacer dinamico), o sea podria ser
Código PHP:
Ver original
  1. function Prueba($var)
  2. {
  3.     echo "funciona $var!";
  4. }

por una cuestion de dinamismo puede que le pase una variable a Prueba, o sea..
Código PHP:
Ver original
  1. Prueba($variable);
esto tiraria error o no, dependiendo de como este definida la funcion Prueba...

Pregunta
como hago para evitar que suceda esto?
encontre 2 formas: set_error_handler y ReflectionClass
Hay una tercera forma? O un mejor diseño?

Saludos

Última edición por Fernand0; 31/10/2013 a las 19:16
  #10 (permalink)  
Antiguo 31/10/2013, 19:49
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: MVC: control de argumentos validos

Ahora se entiende un poco más lo que intentas decir.
Proba algo así:

Código PHP:
Ver original
  1. <?php
  2. function prueba($var = null)
  3. {
  4.     echo (@$var != null) ? 'hay argumento' : 'no hay argumento';
  5. }
  6.  
  7. prueba();
  8. prueba("xxx");
  9. ?>

Saludos
  #11 (permalink)  
Antiguo 01/11/2013, 02:04
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: MVC: control de argumentos validos

ok, no doy variantes, doy un ejemplo concreto
Código PHP:
Ver original
  1. function prueba($arg)
  2. {
  3.     echo "hola $arg!";
  4. }
  5.  
  6. prueba(); /* resultado:
  7.                       "Warning: Missing argument 1 for ... "
  8.                       "Notice: Undefined variable: arg ... "
  9.           */
este ejemplo no es dinamico.. las variables no cambiarian... pero lo que si cambiaria - mas tarde en el codigo - seria a que funcion llamo.


entonces dinamicamente.. en vez de llamar a "prueba" puedo llamar a otra funcion.. ej.:
Código PHP:
Ver original
  1. function control()
  2. {
  3.     echo "lalala";
  4. }
  5.  
  6. control(); /* 0 error.. al menos segun mi configuracion... aun asi, tendria en mi lista de argumentos pendiente que dicho argumento ESPERA llamar a una funcion con argumento DE NO PODER DARSE EL CASO tirar un Exception */
o sea, necesito que el codigo "identifique" cuando estoy llamando a una funcion A para un argumento B, y si esa funcion A.. necesita o no un argumento, y de ahi operar

esto ya lo se hacer... repito... lo puedo hacer con set_error_handler o con Reflection, pero me han hablado mal de los 2... que uno es una mala practica y que el otro quita performance.... con lo que no estoy en desacuerdo del todo
Por eso busco una alternativa

Saludos
  #12 (permalink)  
Antiguo 01/11/2013, 05:20
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: MVC: control de argumentos validos

Cita:
Iniciado por Fernand0 Ver Mensaje
este ejemplo no es dinamico.. las variables no cambiarian... pero lo que si cambiaria - mas tarde en el codigo - seria a que funcion llamo
Sabes los parametros pero no sabes la funcion?Si te encuentras en esa situación, no tienes que buscar una solución a eso, sino replantear qué te ha llevado allí.
Los argumentos son una propiedad de la función.No deberías estar en una situación donde conoces la propiedad, pero no conoces quién la posee.
El único caso en el que tiene sentido, es cuando una familia de funciones recibe siempre los mismos parámetros, y en el mismo orden (en tus ejemplos sólo usas 1 parámetro...y si fueran 4?No sólo necesitas saber que son 4, sino su orden).

La solución rápida: pasa siempre sólo un parámetro, llamado "$arguments", y que la función resuelva el problema.
La solución compleja: Si ves una página web como una clase (con métodos,o páginas, públicas, privadas,etc), cada página tiene que definir qué parámetros recibe, cuáles son opcionales, cuáles requeridos, y qué controlador la gestiona.Antes de llegar al controlador, todo eso se tiene que conocerse.

Muy posiblemente, el párrafo anterior se sale del MVC clásico...pero no soy un gran fan de MVC.

Etiquetas: argumentos, diseño, mvc, validacion
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 04:38.