Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/04/2011, 06:19
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 4 meses
Puntos: 845
Respuesta: Solicitud de orientacion

Que tal Triby,

a ver:

1 - los modelos no deberian redireccionar, en todo caso lanzar una excepción o guardar el error y que el controller compruebe el estado para decidir que hacer.

2 - global state, mala palabra, yo lo trataría de evitar, podrías refactorizar a algo así:

Código PHP:
Ver original
  1. class Base
  2. {
  3.     protected $_principal;
  4.  
  5.     public function __construct(Principal $p)
  6.     {
  7.         $this->_principal = $p;
  8.     }
  9.  
  10.     public function error($msg)
  11.     {
  12.         $this->_principal->error($msg);
  13.     }
  14. }

y si no queres estar pasando Principal en cada una de las clases, podes hacer un fallback a registry, claro tendrias que tener registry :), pero es algo simple de construir ,

Código PHP:
Ver original
  1. public function __construct(Principal $p = null)
  2. {
  3.    if(null === $p) {
  4.         $p = $this->_getDefaultPrincipal();
  5.     }
  6.    $this->_principal = $p;  
  7. }
  8.  
  9. protected function _getDefaultPrincipal()
  10. {
  11.     if(!Registry::has('principal')) {
  12.         throw new ModelException(/**/);
  13.     }
  14.     return Registry::get('principal');
  15. }

Aclaración: esto también oculta dependencias, lo ideal seria utilizar DI.

3 - no entiendo bien, queres hacer una clase base(Object) para todos, modelos, vista y controladores ?

4 - Si cada uno debería tener su clase base especifica.

Con respecto a parent, this y self:
  1. parent hace referencia a la clase base
  2. this hace referencia a la instancia actual
  3. self hace referencia a la clase actual

PHP lo maneja de una forma particular, pero deberías utilizar self para acceder a los miembros estáticos, en tu ejemplo yo utilizaria $this->saveCache, $this->error y parent lo utilizaría, si por ejemplo reescribiera saveCache en configModel,
Código PHP:
Ver original
  1. class ConfigModel extends Base
  2. {
  3.     private $_config = array();
  4.  
  5.     public function __construct()
  6.     {
  7.         // Cargo la configuracion desde la base de datos
  8.         // Si algo falla:
  9.         $this->error('No se puede cargar la configuracion.');
  10.     }
  11.  
  12.     public static function log($message)
  13.     {...}
  14.  
  15.     public function saveConfig($newValues)
  16.     {
  17.         // Guardo los nuevos valores de configuracion
  18.         // Guardo todo en archivo de cache
  19.         $this->saveCache('config', $this->_config);
  20.         self::log('cache saved  ' .  time());
  21.     }
  22.  
  23.    public function saveCache($file, $contents, $save = false)
  24.    {
  25.        if(true === $save) {
  26.           parent::saveCache($file, $contents);
  27.        }
  28.       ...
  29.    }
  30.  
  31. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 03/04/2011 a las 07:36 Razón: aclaración