Buenas a todos, los que llegan a este tema, les traigo un framework que estaré haciendo en estos dias .
Que quiero hacer?
Un Framework que siga el patrón MVC, y desde 0, cada día si fuera posible estaré actualizando este tema.
Antes de empezar con algo de código, explicare que es MVC y mas.
Que es MVC?
El Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir, por un lado define componentes para la representación de la información, y por otro lado para la interacción del usuario . Este patrón de arquitectura de software se basa en las ideas de re utilización de código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo de aplicaciones y su posterior mantenimiento.
Fuente: Wikipedia
Ahora que saben el concepto.
¿Como funciona?

El usuario realiza una petición al servidor.
El CONTROLADOR captura la petición.
Hace la llamada al MODELO correspondiente.
El MODELO sera el encargado de interactuar con la base de datos.
El CONTROLADOR recibe la información y la envía a la VISTA.
La vista muestra la información.
Nota: al final de esta parte, habrá otra explicación de como funciona el MVC(luego de ver el código).
¿Como identifico al CONTROLADOR?
Por la URL
Ademas de identificar al CONTROLADOR, también se identifica a la ACCIÓN dentro del controlador, y adicionalmente si hubiese, tambien PARÁMETROS




Tal como se explica, si no se especifica CONTROLADOR o ACCIÓN, este se asumen como el por defecto, que para este caso seria INDEX.
Entonces empecemos:Lo primero es mas importante, Un servidor web en su PC local o un servidor gratuito que tengan en Internet.
Yo usare xampp(lampp para linux) para las pruebas del framework .
Este proyecto tendrá estas carpetas y archivos de empiezo(seguro se agregara mas).

Carpeta:
Controlador: Contiene todos los controladores.
Modelo: Contiene todos los modelos.
Vista: Contiene todas las vistas.
Archivos:
.htaccess: Tiene muchas usos, y para este caso en especifico, redirige todas las consultas del servidor, hacia el archivo INDEX.php
index.php: Prácticamente este archivo sera el corazón del framework , sera la encargada de cargar el controlador especifico de acuerdo a la consulta del cliente
Ahora un poco de código..htaccess
RewriteEngine on
RewriteBase /mvc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]
Lo que hace es redirigir todas las consultas realizadas al servidor web y llevar al index por método GET.
index.php
<?php
define("RUTA", getcwd());// definimos la constante RUTA, como la URL del nuestro proyecto.
$request = (isset($_GET['request']) ? explode('/', $_GET['request']) : null);//La URL que fue mandada desde el archiv .htaccess por METODO GET se captura y se convierte en un array cada parametros de esta
$cont=0;// definimos un contador que empiece en 0 para una forma de identificar el controlador y la accion. cuando cont=0 entonces es la CONTROLADOR, cuando con=1 es una Accion
if(isset($request)){
//Si la variable esta iniciada, entonces capturamos los datos que necesitamos CONTROLADOR y ACCION
foreach ($request as $a => $b) {
if($b==""){
// si la consulta es DOMINO,COM/ALGO/{acaesunespaciovacio} o DOMINO,COM/{acaesunespaciovacio} , entonces es reeemplazado por INDEX que es por defecto
$b="index";
}
if($cont==0){
//La primera vez, para la URL DOMINIO.COM/HOLA/WENDINGO , CONTROLADOR: HOLA y ACCION: INDEX
$controlador=$b;
$accion="index";
}
if($cont==1){
//La segunda vez, para la URL DOMINIO.COM/HOLA/WENDINGO, CONTROLADOR: HOLA y ACCION: WENDINGO
$accion=$b;
}
$cont=$cont+1;
}
}else{
//Si no existe como para este caso DOMINIO.COM , entonces CONTROLADOR y ACCION son INDEX que es el por defecto de este framework.
$controlador="index";
$accion="index";
}
if(file_exists(RUTA."/controlador/".$controlador."_controlador.php")){//Comprobamos si existe el archivo {CONTROLADOR}_controlador.php
require(RUTA."/controlador/".$controlador."_controlador.php");//Si el archivo existe, entonces lo cargamos con REQUIRE
if(method_exists($controlador."_controlador",$accion)){//Comprobamos que el metodo(accion) existe dentro de la clase {CONTROLADOR}_controlador
call_user_func(array($controlador."_controlador", $accion));//Ejecutamos la accion del controlador
}else{
echo "<br>ERROR No existe la accion ".$accion." en el controlador ".$controlador."<br>";//ERROR
}
}else{
echo "<br>ERROR No existe el controlador ".$controlador."<br>";//ERROR
}
?>
Hasta allí ya estaría el corazón del framework o parte del corazón Ahora como implemento esto?dentro de la carpeta CONTROLADOR, crear un archivo llamado {NombredeControlador}_controlador.php
y dentro
<?php
class {CONTROLADOR}_controlador{
public static function {ACCION}(){
}
}
?>
ejemplo para el controlador principal o index
index_controlador.php

Y dentro creamos la Clase y funcion.
<?php
class index_controlador{
public static function index(){
//DOMINIO.COM
//DOMINIO.COM/INDEX
//DOMINIO.COM/INDEX/INDEX
}
public static function accion2(){
//DOMINIO.COM/INDEX/ACCION2
echo "<h1>ACCION 2</h1>";
}
}
?>
Si hiciste todo bien deberias pasarte esto.






Por si alguien quiere los archivos.
07/05/2014(Fecha porque los archivos van a estar en constante cambio)
http://www.mediafire.com/download/69pb7rzz2cs212h/mvc.rarEste tema aun no esta terminado y continuara Por implementar: Pagina que muestra el error mas explicito, Cargar Vistas, Cargar Modeos, Acceso a la BD y masDejarme preguntas o correcciones de codigo que tengan sobre lo que estoy haciendo
todo comentario es bien recibido(Sin insultos plz xD).
Nota: Algunas preguntaran ¿para que es hacer esto? o que estoy haciendo una web con esto.
La respuesta es que puede servir para cualquier persona que quiera hacer una pagina web con el patron MVC, usando un framework(que seria el que facilitaría muchas cosas).
Cuando este terminado este framework, haré un tutorial(Para los que esten atentos al desarrollo de este framework, ya no necesitaran tutorial porque ya lo conoceran) sencillo de como usarlo, para que cualquier persona lo use y beneficie.
Linkback: https://minecraftmin.net/index.php?topic=1813.0