"> Foro - [PHP] Framework con MVC desde 0 en Programación web - Page 1 of 1
Marzo 14, 2025, 10:33:35 pm
Visitante

Autor Tema: [PHP] Framework con MVC desde 0  (Leído 6295 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Mayo 08, 2014, 02:29:48 am

RgtArRr




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    MinecraftMin, el mejor foro Español!
  • Actividad

  • 0%
  • Logros

Más información

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?
Citar
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
Citar
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
Citar
<?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
Citar
<?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.

Citar
<?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.rar

Este 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 mas
Dejarme 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


Respuesta #1 Mayo 08, 2014, 04:08:15 am

thalac123




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    MinecraftMin, el mejor foro Español!
  • Actividad

  • 0%
  • Logros

Más información

deja de hacer esto y termina tus plugins(lobbyutilis es una trajedia)
MVC no me gusta me quedo con java



Respuesta #2 Mayo 08, 2014, 05:01:43 am

RgtArRr




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    MinecraftMin, el mejor foro Español!
  • Actividad

  • 0%
  • Logros

Más información

deja de hacer esto y termina tus plugins(lobbyutilis es una trajedia)
MVC no me gusta me quedo con java

Próximo tutorial: Ortografía desde 0.
PD: Que bueno que te guste(sarcasmo)


Respuesta #3 Mayo 08, 2014, 12:27:08 pm

Alfomega




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Ingeniero informático
  • Actividad

  • 0%
  • Logros

Más información

Te quedó indicar que lo del index no es por ser MVC, ya que con el .htaccess podrías hacer lo que hace el index, pero lo haces con index por otra buena práctica, el punto de entrada común.
Muy buen aporte y bien explicado, aunque un poco técnico para el que no tenga ni idea.
https://i.imgur.com/cFX0ssZ.png





Share via delicious Share via digg Share via facebook Share via furl Share via linkedin Share via myspace Share via reddit Share via stumble Share via technorati Share via twitter

xx
[API] Framework TS3 PHP

Iniciado por Doc

0 Respuestas
2818 Vistas
Último mensaje Diciembre 04, 2014, 04:21:12 pm
por Doc
xx
Aporte Framework Bootstrap

Iniciado por Doc

10 Respuestas
6486 Vistas
Último mensaje Abril 21, 2014, 04:22:06 pm
por Doc