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 originalclass ... {
function canEdit()
{
$id_user=$_SESSION["id_user"];
}
}
en un modelo, incluso en un controlador (dependiendo del tipo de controlador), hay que
sustituirlo por
Código PHP:
Ver originalclass ... {
function canEdit($editor)
{
$id_user=$editor;
}
}
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)