Ver Mensaje Individual
  #5 (permalink)  
Antiguo 01/04/2014, 09:18
Avatar de dashtrash
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, 8 meses
Puntos: 270
Respuesta: Consejos para el manejo de las variables globales de PHP en MVC

En mi opinión, las variables propias del protocolo HTTP ($_POST,$_GET,$_COOKIE..) sólo pueden usarse en la capa más externa de la aplicación (el enrutado).
En cualquier otro lado, están prohibidas.
Si tú usas,digamos, $_GET en un cierto método, estás obligando a que ese método sea llamado dentro de una petición HTTP.Estás introduciendo una interdependencia no solo innecesaria, sino peligrosa.
Si mañana necesitas que se llame a ese método, pero desde php-cli, o se cambia cómo se pasan los parámetros a la página, tienes que cambiar el método.

Es decir, esto:
Código PHP:
Ver original
  1. class ... {
  2.    function canEdit()
  3.    {
  4.         $id_user=$_SESSION["id_user"];
  5.     }
  6. }

en un modelo, incluso en un controlador (dependiendo del tipo de controlador), hay que
sustituirlo por
Código PHP:
Ver original
  1. class ... {
  2.    function canEdit($editor)
  3.    {
  4.         $id_user=$editor;
  5.     }
  6. }
Las cosas relacionadas con el protocolo con el que se llama a tu sistema, tienen que quedar sólo en esa capa: la que se encarga de gestionar el protocolo, es decir, el enrutado.
Y quien debe hacer eso?Quien convierte variables $_GET a variables php, si no es el modelo, o el controlador?
Lo que yo hago es usar otros elementos, como la clase Pagina.
El protocolo HTTP tiene el concepto de 'página'.Encontrar la Página a renderizar es el objetivo del enrutado.Página es una clase (más bien, un componente más del paradigma...Pagina != Vista).Esta clase 'Página' es la única que tiene acceso a $_GET, $_POST,$_SESSION,$_COOKIE... y debe convertirlas a parámetros del "controlador".Del controlador hacia abajo, no permito el uso de $_POST,$_SESSION,$_COOKIE, etc (de hecho, las pongo a null...mientras php me permita hacerlo)