Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/03/2016, 11:48
programador_aprendiz
 
Fecha de Ingreso: febrero-2016
Ubicación: D.F.
Mensajes: 30
Antigüedad: 8 años, 2 meses
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?