Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

dudas mvc + POO

Estas en el tema de dudas mvc + POO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. buenas estoy intentando mudar un blog modular a mvc y me surgieron algunas dudas 1- Investigando sobre singleton encontre este ejemplo con PDO: Código PHP: ...
  #1 (permalink)  
Antiguo 02/04/2008, 14:35
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
dudas mvc + POO

buenas estoy intentando mudar un blog modular a mvc y me surgieron algunas dudas

1- Investigando sobre singleton encontre este ejemplo con PDO:

Código PHP:
class DB extends PDO 
    
{
        private static 
$instance null;
     
        public function 
__construct() 
        {
            
$config Config::singleton();
            
parent::__construct('mysql:host=' $config->get('dbhost') . ';dbname=' $config->get('dbname'), 
    
$config->get('dbuser'), $config->get('dbpass'));
        }
     
        public static function 
singleton() 
        {
            if( 
self::$instance == null 
            {
                
self::$instance = new self();
            }
            return 
self::$instance;
        }
    } 
quisiera saber si se puede hacer lo mismo sin usar PDO ni otra libreria de base de datos, o sea como indican los manuales sobre una conexion a mysql simple.

2- Como a mi blog quiero hacerle una administracion esta bien que arme la estructura de los directorios asi:
Código HTML:
htdocs/
           /admin/
                      /vistas/
                     /modelos/
                     /controladores/
          /includes/
          /modelos/
         /vistas/
        /controladores/
       /index.php
3- La platilla va a ser simple un cabecera, el contenido (las noticias), un footer y un siderbar con las categorias y los links. Bien mi idea era crear un modelo para obtener los links y las categorias de la base de datos, mi duda es si en una controlador puedo llamar a varios modelos, es decir que en el controlador noticias llame al modelo noticias para obtner estas y que llame al modelo inicio para poder obtener las categorias y los links para despues poder mostrarlos en la plantilla.

4- Si no estoy equivocado por cada accion que necesite tengo que crear un controlador y/o modelo. Por ejemplo:
para leer/crear/borrar comentarios necesito crear un modelo comentarios para el manejo de la db y un controlador para la acciones leer/crear/borrar, para la noticias lo mismo con su controlador y modelo, para ver las categorias, etc, etc, etc

salu2
  #2 (permalink)  
Antiguo 02/04/2008, 15:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: dudas mvc + POO

1.- Si es posible hacerlo, pero tendrías que implementar toda la lógica para trabajar sobre las funciones de MySQL por decir:
Código PHP:
class DB {
        private 
$connection null;
        private static 
$instance null;
        private function 
__construct() {
                    
$config Config::getInstance();
                    
$this->connection mysql_connect$config->get'db' ), $config->get('user'), $config->get'pass' ) );
        }

        public static function 
getInstance() {
                if( 
self::$instance == null ) {
                          
self::$instance = new self();
                }

                return 
self::$instance;
        }

        public function 
__destruct() {
                 
mysql_close$this->connection );
        }

2.- Si esa estructura te sirve para tu aplicación no veo porque no la debas de usar, no hay una "regla" mas que la separación de capas.

3.- Recuerda que el controlador es la unión de la información, así que no hay ningún problema en llamar a diferentes modelos para tener toda la información lista.

4.- Debes de crear un modelo por cada entidad de datos requieras, y puedes tener un solo controlador, pero es mas limpio si separas cada controlador en su caso especifico de uso.

Saludos.
  #3 (permalink)  
Antiguo 02/04/2008, 16:34
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Re: dudas mvc + POO

otra duda GatorV, en el index de mi blog uso este codigo:
Código PHP:
//Incluimos el FrontController
    
require 'include/FrontController.php';
    
//Lo iniciamos con su método estático main.
    
FrontController::main(); 
mi duda ahora esta en si en el index.php de la carpeta /admin tengo que usar el mismo codigo o algo distinto?

salu2
  #4 (permalink)  
Antiguo 02/04/2008, 17:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: dudas mvc + POO

Si vas a enrutar de la misma manera en /admin yo creo que si debes de incluir otra vez el FrontController.

Saludos.
  #5 (permalink)  
Antiguo 04/04/2008, 20:17
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Re: dudas mvc + POO

hola de nuevo, yo aca molestando otra vez, esta vez quiero hacer la siguiente consulta:

arme mi archivo modelo llamado iniciomodelo.php en el cual entre otras cosas contiene estas funciones:
Código PHP:

            $ip 
='202.164.32.81';
            
$fecha date("j del n de Y");
            
$hora date("h:i:s");
            
$segundos time();
            
$can "3600";
            
$resta $segundos-$can;
            
            
//Se genera la consulta a la base de datos, solicitando cualquier registro 3600 segundos 
             //anteriores a los segundos actuales(obtenemos todos los registros una hora atrás).
             
$sql $this->db->prepare("SELECT segundos, IP FROM `contador` WHERE segundos >= ? 
                                         AND IP LIKE ? "
);
             
$sql->execute(array($resta$IP));
             
            
// Creamos el condicionamiento de loguear o no la entrada, 
            // dependiendo si el numero de registros es o no mayor a cero.
            
if ($sql->rowcount()>0){
                
//no se cuenta la visita
            
}
            else{
                
$sql $this->db->prepare("INSERT INTO `contador` (id, IP, fecha, hora, segundos)
                                          VALUES ('','?','?','?')"
);
                
$sql->execute(array($IP,$fecha,$hora,$segundos));
            }
            
            
// Contamos los registros que tenemos en la tabla y se los asignamos
            // a la variable $visitas que es la que después visualizaremos en pantalla.
            
$visitas $this->db->prepare("select * from contador where id");
            
$visitas->execute();
            
$visitas->rowcount();
            return 
$visitas;
        }
        
        
/**
         * @name : get_visitante().
         * @return : Devuelve la ip y el pais desde donde nos visitan.
         */
        
        
public function get_visitante(){
                    
            
//obtengo la ip del visitante
            //$ip =$_SERVER["REMOTE_ADDR"];
            
$ip ='202.164.32.81';
            
            
//busco la ip en la base de datos.
            
$ip_country $this->db->prepare("SELECT country_code2,country_name FROM paises 
                                               WHERE IP_FROM<=inet_aton('?')
                                                AND IP_TO>=inet_aton('?') "
);
            
$ip_country->execute(array($ip,$ip));
            
            
//extraigo los datos
            
$nombre$ip_country->fetch();
            
            
//armo el resultado a mostrar.
            
$visitante="tu ip es: <b>".$ip."</b> - <B> - Pais: </B>".ucfirst(strtolower($nombre['country_name']))."
                         <img src='images/flag/"
.ucfirst(strtolower($nombre['country_name'])).".gif'  height='20' width='20' border='0'>";
            return 
$visitante;
        }
        
        
/**
         * @name : set_referencia().
         * @return : guarda las referencias en la base de datos.
         */
        
public function set_referencia(){
            
            
//obtengo la ip
            //$ip =$_SERVER["REMOTE_ADDR"];
            
$ip ='202.164.32.81';
            
            
//busco la ip en la base de datos.
            
$ip_country $this->db->prepare("SELECT country_code2,country_name FROM paises 
                                               WHERE IP_FROM<=inet_aton('?')
                                                AND IP_TO>=inet_aton('?') "
);
            
$ip_country->execute(array($ip,$ip));
            
            
//extraigo los datos
            
$nombre$ip_country->fetch();
            
            
//seteo la fecha
            
$fecha=date("l j F, Y, H:i");
            
            
//seteo la referencia
            
$dom=getenv("HTTP_REFERER");
            
            
//controlo la ip y guardo los datos
            
if (($ip!='200.43.135.145') ){
                
$sql$this->db->prepare("INSERT INTO referencias (`id_ref`, `ip`, `dominio`, `pais`,`fecha`) VALUES (NULL,'$ip','$dom','$nombre[country_name]','$fecha')");
                
$sql->execute();
            }
        } 
despues en mi controlador uso esto:
Código PHP:
class IndexController extends ControllerBase {
        
        
/**
         * @name : Index().
         * @return : Devuelve los datos para mostrar en la pagina principal del blog.
         * @access : public.
         */
        
public function index()
        {
            
            
//llamo a los modelos
            
require('modelo/InicioModelo.php');
            
            
//creo una instancia del modelo
            
$inicio= new InicioModel();
            
            
//pido al modelo todas las secciones
            
$visitantes=$inicio->get_visitante();
            
$visitas=$inicio->get_visitas();
            
$categorias=$inicio->get_cetegorias();
            
$referencias=$inicio->set_referencia();
            
$links=$inicio->get_links();
            
$post=$inicio->get_noticias();
            
            
//preparo los datos para la vista
            
$data['visitantes']=$visitantes;
            
$data['visitas']=$visitas;
            
$data['categorias']=$categorias;
            
$data['links']=$links;
            
$data['referencias']=$referencias;
            
$data['post']=$post;
            
            
//presento nuestra plantilla
            
$this->view->show("index.php"$data);
        }
        
    } 
y por ultimo en la vista pongo asi:
Código PHP:
<div  id="menu">
            <ul>
                <li id="current"><a href="index.html">Inicio</a></li>
                <li><a href="index.html">Archivo</a></li>
                <li class="last"><a href="index.html">About</a></li>        
                <li class="last">Sos el visitante nº: <?php //echo $visitas;?></li>
                <li class="last"><?php echo $visitante;?></li>
            </ul>
            <?php
                
//armo la referencias
                
$referencias
            ?>
        </div>
Bien el problema que estoy teniendo es que no me muestra el contador ($visitas) ni el origen de la visita($visitantes) y no me guarda la referencia ($refencias) en que me estoy equivocando?

Desde ya muchas gracias
  #6 (permalink)  
Antiguo 04/04/2008, 23:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: dudas mvc + POO

Prueba, antes de llamar a tu vista, hacer un var_dump( $data ); para ver si el problema esta en el paso de las variables del controlador a la vista, o tu problema esta en otro lado.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:28.