Foros del Web » Programando para Internet » PHP »

PHP OO duda al implementar mvc en php

Estas en el tema de duda al implementar mvc en php en el foro de PHP en Foros del Web. Buenas compañeros, tengo el siguiente cuestionamiento en base al mvc, es decir la forma de implementarlo les explico: Antes que nada estube investigando y me ...
  #1 (permalink)  
Antiguo 30/03/2016, 11:48
 
Fecha de Ingreso: febrero-2016
Ubicación: D.F.
Mensajes: 30
Antigüedad: 8 años, 1 mes
Puntos: 0
Pregunta duda al implementar mvc en php

Buenas compañeros, tengo el siguiente cuestionamiento en base al mvc, es decir la forma de implementarlo les explico:

Antes que nada estube investigando y me di cuenta de que, existen un sinfin de frameworks que nos ayudan y facilitan la vida. Yo elegi codeigniter que segun es bastante sencillo para empezar, pero al final, no le entendi bien, etnoces decidi que lo mejor para esto seria el desarrollar un ejemplo mvc a puro código php.

Tomando como base los ejemplos de este enlace y este otro y algunos prueba y error es como finalmente obtube un ejemplo más o menos funcional.

En una carpeta llamada practica_mvc en xampp tengo la siguiente estrictura de archivos:

carpeta "conexiones_bd" esta el archivo "bd.php"
carpeta "controlador" esta el archivo "controlador.php"
carpeta "modelo" esta el archivo "modelo.php"
carpeta "plantillas" estan los archivos "encabezado.php" y "pie_pagina.php"
carpeta "vista" esta el archivo "vista.php"
archivo "index.php"

El código de cada uno de los archivos es el siguiente:

archivo "index.php"
Código PHP:
<?php
require_once("plantillas/encabezado.php");
?>

        <section>
            <a href="controlador/controlador.php">Solicite nuestro menú</a>
        </section>

<?php
require_once("plantillas/pie_pagina.php");
?>
archivo "encabezado.php"
Código PHP:
<!DOCTYPE html>
<
html lang="es">
<
head>
    <
meta charset="UTF-8" />
    <
title>Modelo-vista-controlador</title>
</
head>
    <
body>

    <
header>
        <
h1>Bienvenido al restaurant Chefcito</h1>
    </
header>
    <
nav>
        <
a href="#">menu1</a>
        <
a href="#">menu2</a>
        <
a href="#">menu3</a>
        <
a href="#">menu4</a>
    </
nav
archivo "pie_pagina.php"
Código PHP:
       <footer>
            <
p>Todos los derechos reservados 2016</p>
        </
footer>

    </
body>
</
html
archivo "controlador.php"
Código PHP:
<?php
    
require_once("../modelo/modelo.php");
    
$menu = new Platillo();
    
$info_menu $menu->lista_platillos();
    require_once(
"../vista/vista.php");
?>
archivo "bd.php"
Código PHP:
<?php
class Conectar{
    public static function 
conexionMysql(){
        
//parametros mysqli():
        //"nombre_servidor", "usuario", "contraseña", "nombre_base_datos"
        
$conexion=new mysqli("localhost""root""""bd_mvc");
        
$conexion->query("SET NAMES 'utf8'");
        return 
$conexion;
    }
}
?>
archivo "modelo.php"
Código PHP:
<?php
require_once("../conexiones_bd/bd.php");

class 
Platillo
{
    private 
$platillo_menu;
    private 
$establece_conexion;
 
    
//al crear objeto de la clase Platillo tambien estamos estableciendo
    //una conexion con la base de datos y un array para almacenar los
    //datos obtenidos por las consultas
    
public function __construct()
    {
        
$this->establece_conexion=Conectar::conexionMysql();
        
$this->platillo_menu = array();
    }
 
    public function 
lista_platillos()
    {
        
$consulta=$this->establece_conexion->query("SELECT * FROM platillos;");
        while(
$filas_tabla=$consulta->fetch_assoc()){
            
$this->platillo_menu[]=$filas_tabla;
        }
        return 
$this->platillo_menu;
    }
}
?>
archivo "vista.php"
Código PHP:
<?php
require_once("../plantillas/encabezado.php");
?>

    <h1>Platillos disponibles</h1>

        <?php
            
foreach ($info_menu as $platillo) {
                echo 
"ID platillo: ".$platillo["id_platillo"];
                echo 
" Nombre: ".$platillo["nombre"];
                echo 
" Costo: ".$platillo["precio"];
                echo 
" Existencia: ".$platillo["disponible"]."<br/>";
            }
        
?>

<?php
require_once("../plantillas/pie_pagina.php");
?>
Mis dudas son las siguientes:
-En el archivo index.php segun se, tambien le llaman controlador frontal y yo entiendo que cuando se accede a alguna pagina o aplicación desde este controlador se cargan las diferentes partes que lo componen, ademas de establecer ciertas configuraciones. Yo lo modifique con el código que les mostre para que cuando se estubiera navegando por el sitio siempre se mostrara el encabezado y pie y para no estar repitiendo código al ir llamando a los diferentes controladores. No se si esta sea la forma correcta.

-En cuanto a los controladores solo por el momento tengo uno solo el cual llamo con un enlace desde el index.php. Pero si tubiera mas secciones a agregar que hagan cosas diferentes intullo que dichos controladores los estaria llamado desde un menu principal, en especifico desde esta parte de código del encabezado:

Código HTML:
<nav>
        <a href="#">menu1</a>
        <a href="#">menu2</a>
        <a href="#">menu3</a>
        <a href="#">menu4</a>
    </nav> 
Asi como tengo esta estructura y códigos si funciona y si me muestra la info obtenida desde una tabla de base de datos.

Tal vez algunos me diran que primero tengo que tener fuertes conocimientos en objetos para php y esas cosaspero, me gustaria ir llevando esto de la mano mientras lo aprendo y ya una vez comprendido pasarme a algun framework. ¿Podrian ayudarme?
  #2 (permalink)  
Antiguo 30/03/2016, 13:13
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Respuesta: duda al implementar mvc en php

Las separaciones están algo mal planteadas. El archivo encabezado.php y el pie_pagina.php tienen etiquetas que no corresponden. Por ejemplo, body y html.

Por otra parte, desarrollar tu propio MVC puede ser complicado. Hace poco tuve mi primer contacto con esa arquitectura, y Laravel me pareció genial. Te lo recomiendo.
__________________
¿Te sirvió la respuesta? Deja un +1
  #3 (permalink)  
Antiguo 30/03/2016, 13:55
 
Fecha de Ingreso: febrero-2016
Ubicación: D.F.
Mensajes: 30
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: duda al implementar mvc en php

Cita:
Iniciado por NueveReinas Ver Mensaje
Las separaciones están algo mal planteadas. El archivo encabezado.php y el pie_pagina.php tienen etiquetas que no corresponden. Por ejemplo, body y html.

Por otra parte, desarrollar tu propio MVC puede ser complicado. Hace poco tuve mi primer contacto con esa arquitectura, y Laravel me pareció genial. Te lo recomiendo.
Ya veo, lo que pasa es que anteriormente habia probado el CodeIgniter, pero la verdad no lo entendi muy bien. Si pude instalarlo y configurar algunas cosas y eso pero si me preguntas si realmente entendi el modelo mvc pues la verdad no.

Por eso se me ocurrio el desarrollar una pequeña pagina de pruebas a modo de ejemplo para ir aprendiendo esto y, porteriormente una vez entendido empezar con un framework.

Por cierto, ¿a que terefieres que la separacion esta mal planteada? mencionas que las etiquetas body y html no corresponden. No lo entiendo, te refieres a que en el archivo no deberian de ir o que no tienen sus etiquetas de cierre pero de hecho si estan en el archivo pie_pagina.php.

Si pudieras ilustrarme sobre como irian te lo agradecere, ya que, asi yo entendi que podria ser la implementación.
  #4 (permalink)  
Antiguo 30/03/2016, 20:08
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: duda al implementar mvc en php

Cita:
Iniciado por programador_aprendiz Ver Mensaje

Tal vez algunos me diran que primero tengo que tener fuertes conocimientos en objetos para php y esas cosaspero, me gustaria ir llevando esto de la mano mientras lo aprendo y ya una vez comprendido pasarme a algun framework. ¿Podrian ayudarme?
MVC es una posible solución a una serie de problemas. Esos problemas no tienen por qué ser fácilmente entendibles por una persona que comienza a programar.Es más, es posible que si trabajaras en proyectos pequeños, quizás nunca te los plantearas.
Dices que has modificado el index.php para que incluya la cabera y el pie, ya que, total, lo vas a incluir siempre..
Eso es equivalente a decir que le vas a quitar las puertas a tu coche,porque, total, siempre que entras o sales tienes que abrirlas..
O sea, que piensas que algo es una solución, porque no entiendes el problema completo.Es posible que no necesites años y años de conocimientos en PHP para entender MVC (o cualquier otro paradigma), pero...o lo aprendes, y te preguntas por qué se hace así, o das tus "soluciones".Las dos cosas a la vez, no.

Porque, basándonos sólo en tu argumento, el que siempre vayas a incluir la cabecera y el pie, es muy muy relativo.Nunca vas a devolver, por ejemplo, un json? Y, aunque fuera asi, en la cabecera nunca vas a mostrar nada asociado, por ejemplo, al usuario actual?
Y si ambas cosas fueran asi (no envias json, no tienes usuarios), crees que haciendo una cosa tan particular para lo que necesitas *ahora* vas a entender una solución de arquitectura como MVC? Estás programando según un set de requisitos que tienes ahora mismo, no pensando en problemas genéricos.No veo cómo haciendo lo primero, consigues lo segundo.

Incluso si utilizas un framework "conocido", el hecho de usarlo no te garantiza que tu desarrollo sea MVC, o sea mejor que un desarrollo PHP de la vieja escuela.

Como ejemplo de lo que te digo, uno de los problemas más graves del código que tienes, es el uso de la conexión de la base de datos.
De tu código, se infiere que:
- Un "Platillo" posee su propia conexión a una base de datos Mysql
Si creas 3 instancias de Platillo, conectas 3 veces a la base de datos.
Un Platillo no tiene una conexión a una base de datos.Tendrá un nombre, un precio, una descripcion...Pero no una conexión a una base de datos.
(Ni deriva de nada que tenga que ver con una base de datos...error grave de muchos frameworks).
Empezando por donde estás, y, a base de código,llegar a MVC (especialmente si por el camino vas arrancando lo que crees que no sirve), te va a ser muy muy complicado.
De hecho, poner un include del header y el footer en el index, te ha llevado directamente al PHP de hace 15 años.Cuando PHP también era "novato".
  #5 (permalink)  
Antiguo 31/03/2016, 09:51
Avatar de jose_php  
Fecha de Ingreso: mayo-2014
Mensajes: 44
Antigüedad: 9 años, 11 meses
Puntos: 2
Respuesta: duda al implementar mvc en php

Bueno recomiendo que te evites hacer las cosas demasiado complicadas, para eso existen frameworks yo tengo 2 años y medio de experiencia usando CodeIgniter y hasta ahora no he tenido problemas de entenderlo y cuando comencé a verlo lo aprendí muy rápido ademas que tiene documentación en español.

Saludos.
  #6 (permalink)  
Antiguo 31/03/2016, 11:56
 
Fecha de Ingreso: febrero-2016
Ubicación: D.F.
Mensajes: 30
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: duda al implementar mvc en php

mmmm, creo que tendre que empezar mejor desde cero. :(

Etiquetas: frameworks, html+javascript, mvc, php+base+de+datos
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




La zona horaria es GMT -6. Ahora son las 07:40.