Nuestro equipo de desarrollo está debatiendo una mejor práctica general: ¿Es mejor acceder a una variable de sesión directamente desde una función en una clase de modelo o pase? la variable de sesión del controlador como un argumento para una función en la clase de modelo. Mira las dos ejemplos siguientes:PHP MVC Best Practice - Pasar la variable de sesión a la clase de modelo desde el controlador o acceder directamente en el modelo
Acceso variable de sesión directamente desde la clase del modelo a utilizar en una consulta:
class MyModel {
public function getUserPrefs($userID) {
$this->query("SELECT * FROM my_table WHERE id=$_SESSION['userID']");
}
}
o pasar la variable de sesión desde el controlador a una función en la clase del modelo en función argumento:
class MyController {
public function displayUsers() {
$this->model->getUserPrefs($_SESSION['userID']);
}
}
class MyModel {
public function getUserPrefs($userID) {
$this->query("SELECT * FROM my_table WHERE id=$userID");
}
}
el razonamiento para pasarlo al modelo desde el controlador está así que todos los datos que se hace referencia está llegando desde un punto de entrada, que siendo el controlador.
¿Qué se reconoce como una mejor práctica?
Sí, de ahí 'controller' es el objeto principal que decide qué se debe obtener de los modelos y se envía a las vistas. +1 – RobertPitt
+1 Un controlador se llama controlador por un motivo. Su trabajo es controlar la entrada (una variable de sesión en ese caso) y pasarla al controlador apropiado (vista, modelo, biblioteca, etc.). – netcoder
Una nota adicional es que creo que deberías estar usando una clase "envoltorio" llamada algo así como "Sesión" que incorpora toda la funcionalidad de obtener/configurar variables de sesión. De esta forma, puede cambiar a usar algo como Memcache con poco esfuerzo al cambiarlo en un archivo/clase. – MikeMurko