Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/04/2011, 15:05
miktrv
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: BBDD POO Config, como implementar?

Cita:
Iniciado por masterpuppet Ver Mensaje
Buenas preguntas miktrv, pero no hay respuestas simples,

1- Hay varias formas de resolverlo, una seria utilizar DI, esto se comento en tu thread anterior, otra mas simple seria que tuvieras un Registry, que en el guardes la conexión y que tus dao's hicieran un fallback al Registry, algo así:

Código PHP:
Ver original
  1. abstract class Dao implements IDao
  2. {
  3.     protected $_pdo;
  4.    public function __construct(PDO $pdo = null)
  5.    {
  6.        if (null === $pdo) {
  7.             $pdo = $this->_getDefaultConnection();  
  8.        }
  9.         $this->_pdo  = $pdo;
  10.    }  
  11.    
  12.    protected function _getDefaultConnection()
  13.    {
  14.         if(!Registry::has('PDO')) {
  15.             throw new DaoException(/***/);            
  16.         }
  17.         return Registry::get('PDO');
  18.    }
  19. }
  20.  
  21. class OfertaDao extends Dao
  22. {}

esta implementación si bien es mas simple, oculta dependencias, lo ideal seria DI, con respecto a cerrar la conexión, de eso no te tenes que preocupar, lo hace PHP cuando termina la ejecución del script.

2- Quien recive el id es el finder del Dao, osea en tu controller instanciarias el Dao y llamarias al find con el id correspondiente,
Código PHP:
Ver original
  1. interface IDao
  2. {
  3.     public function find($id);
  4.     public function findAll();
  5. }
  6.  
  7. abstract class Dao implements IDao
  8. {}
  9.  
  10. class OfertaDao extends Dao
  11. {}
  12.  
  13. //Controller
  14. $dao    = new OfertaDao();
  15. $oferta = $dao->find($_GET['id']);

3- esta pregunta es por demás compleja, la forma simple es que te traigas todo lo relacionado.

Código PHP:
Ver original
  1. class OfertaDao extends Dao
  2. {
  3.    public function find($id, $loadRelated = false)
  4.    {
  5.        $oferta = parent::find($id);
  6.        if(true === $loadRelated && $oferta instanceof Oferta) {
  7.              $cdao = new CiuidadDao();          
  8.              $oferta->Ciudad = $cdao->find($oferta->cuidad_id);
  9.        }
  10.       return $oferta;
  11.    }
  12. }

esto no es mas que una implementación extremadamente simple, yo realmente te sugiero por el tipo de preguntas que estas haciendo, que utilices una herramienta como Doctrine y si es posible la version 2, el problema es que corre sobre PHP 5.3+.

Saludos.
Wuau! muchas gracias por tu esfuerzo!! esta genial!! tengo que intentar digerir todo esto... estoy empezando con MVC.. haré preguntas más parecidas, porque aún me cuesta entender, no se lo que es Dao..

Un saludo!!!