Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/08/2009, 13:31
Avatar de Webstudio
Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Alguna manera elegante para metadata de Usuarios?? Zend Framework.

A ver aquellas personas que utilicen más seguido Zend Framework, que ando con un problema más filosófico y conceptual, que otra cosa.

Les cuento lo más breve posible para que entiendan la "disyuntiva". En otra aplicación, que no usaba frameworks, tenía dos tablas para guardar metadata. Una era para la metadata (o configuración) del sitio, y otra tabla para guardar metadata de usuarios.

Tabla opciones_sitio
id, nombre_variable, valor.

Tabla usuarios_metadata
id, id_usuario, nombre_variable, valor.

Tenía esta forma, ya que aquí los requerimientos cambiaban constantemente, y era más simple a la hora de guardar distintos valores para los usuarios, que no contemplábamos en un inicio, emulando un poco el mismo concepto que utilizan en Wordpress. Una llamada a getUserOption('nombre_variable') alcanzaba para recuperar el valor.

Ahora quiero emular la misma sencilles de uso, dentro de Zend Framework, tanto para recuperar opciones del sitio dentro de los Controllers, así como las opciones de los usuarios. Para los datos de Config de la aplicación creo que tengo una solución que me cierra, creando por un lado un Modelo para las opciones un plugin para accederlos.

Código PHP:
Ver original
  1. class App_Model_DbTable_SiteOptions extends Zend_Db_Table {}
  2. // Y por otro lado
  3. class App_Plugin_SiteOptions extends Zend_Controller_Plugin_Abstract {}
  4.  
  5. // así puedo utilizar, dentro de un controller
  6. public function fooAction() {
  7.     $from = $this->_helper->siteOptions('from_email');
  8. }

Pero ahora quiero encontrar una solución así de elegante, pero para las opciones de los usuarios. Estas opciones generalmente se accederán desde el Controller o desde las Vistas. Para esto, uno diría que lo lógico es tener un objeto que modele al usuario y agregarle un método para obtener esta metadata. Y aquí es donde tengo el problema. Yo tengo actualmente, una clase que modela a mis Usuarios:

Código PHP:
Ver original
  1. class App_Model_DbTable_Usuarios extends Zend_Db_Table_Abstract {}
  2. //Ejemplo
  3. $users = new App_Model_DbTable_Usuarios();
  4. $singleUser = $users->find(123);

Esta clase, está muy atada a Zend_Db_Table, por lo que no creo que sería del todo correcto que yo implemente un método $metadata = $users->getMetadata('photos'); ya que estaría teniendo que instanciar otro objeto Zend_Db_Table_Abstract adentro del anterior, y se me hace como que queda todo muy feo.

Cómo recomendarían que pueda implementar una manera simple y elegante para recuperar la metadata de estos usuarios? Utilizando un Objeto User y un Gateway que incorpore todos los Zend_Db_Tables que necesite? Alguna otra solución?
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com