¿Qué debo saber antes de crear un framework MVC PHP?

Este es un tema masivo, pero intentará condensarlo en solo un par de puntos clave; Demasiado terreno para cubrir aquí: se han creado libros y cursos completos para repasar esto.

Primero, necesitará una sólida comprensión no solo de la POO, sino también de algunas de las técnicas más avanzadas, como la inyección de dependencia y las clases de fábrica. No llegará muy lejos hasta que tenga eso en su haber.

También querrá familiarizarse con PSR y Composer para manejar la carga automática y la administración de la biblioteca.

Con eso fuera del camino, querrás enfocarte en algunas ideas generales sobre la arquitectura. El objetivo de MVC es ayudar a facilitar la separación de las preocupaciones. Los controladores solo deben actualizar los modelos y tratar con la entrada del usuario. Los modelos y las vistas funcionan muy juntos: los modelos procesan datos y luego actualizan los archivos de vista correspondientes en consecuencia. Además, necesitará un enrutador para asignar solicitudes a rutas. Puede hacer esto dinámicamente o rutas de código duro. La clave es construir todos estos componentes separados de manera que todos mantengan sus responsabilidades específicas mientras trabajan juntos como un todo cohesivo; aquí es donde entra en juego la inyección de dependencia.

Ahora también sería un buen momento para considerar cómo implementará la gestión de eventos. Para esto, recomendaría simplemente usar el componente Symfony en lugar de rodar el suyo … esto es difícil de hacer correctamente y muy fácil de fastidiar.

Apenas hemos arañado la superficie, pero esto debería darle mucha comida para pensar para comenzar.

Un par de consejos:

  • Lo más probable es que esté creando un archivo de configuración global para la base de datos, el entorno y la configuración de todo el sitio. Mantenga esta, y cualquier otra información confidencial, fuera de sus repositorios … hay bibliotecas disponibles que puede usar para importarlas a su programa.
  • Comenta todo.
  • La seguridad debe ser su prioridad número 1 en cada paso del camino. No cometas el error de los programadores perezosos de pensar que siempre puedes volver a hacerlo y hacerlo seguro.
  • Uno de los primeros módulos que debe hacer e implementar de inmediato es un buen sistema de registro. Vale su peso en oro, para usted y los desarrolladores que usan su marco.
  • Planifique desde el principio cómo hacer que su código central sea extensible y modular. Por ejemplo, si finalmente desea crear un complemento, y este complemento necesita anular un archivo central, ¿cómo lo implementará sin perder la capacidad de actualizar ese archivo central en el futuro?
  • Finalmente, planifique las cosas a fondo antes de escribir una sola línea de código a medida que avanza paso a paso.

Comprenda que todas las páginas usan y el sitio web nunca sale de la página de índice dot php. Los modelos son los scripts de conexión del controlador de base de datos activos que presentan o obtienen datos de una base de datos para presentarlos al enrutador a través del controlador y también las vistas que se colocan dentro de la página de índice punto php.

Las vistas son plantillas Html y pueden tener hasta 10 o 12 partes, todas clasificadas, organizadas y apiladas por el enrutador junto con modelos de bases de datos justo encima de cada parte también. El controlador es exactamente como suena. Controla todo desde la página index dot php. Pueden ser plantillas individuales con etiquetas de análisis de función y clase Php colocadas para cambiar cada fuente de datos o esquema que es el más utilizado.

El controlador: enruta, divide todo y lo agrupa en una sola entidad dentro de la página de índice punto php. La forma más común de hacerlo es pasando módulos o nombres de página usando GET como mysitename dot com? mod = iniciar sesión o mysite dot com? page = profile & user = long-encrypted-hash. Mod Rewrite en Apache hará que estos enlaces visibles aparezcan como mysite dot com / users / profile o mysite dot com / mod / login, etc.

Un enrutador toma y tamiza condicionalmente la caja del conmutador y, de lo contrario, para determinar el nombre de la página o los nombres de los módulos, se establece de forma predeterminada en una página de inicio o puede llamar a un método de construcción de clase para ejecutar una página si no se encuentra o una página de error si no existe una página . El método POST también se puede usar con un enrutador diseñado adecuadamente y archivos de índice de aterrizaje en cada directorio de carpeta usando un falso falso positivo para fines de enrutamiento. Esto es efectivo para mostrar de 3 a 4 niveles en un directorio profundo, pero en realidad el sitio no ha salido de la página principal de php de índice. Como mysite dot com / groups / conversations / reply / 6745gft34erty7 etc.

LO MÁS IMPORTANTE DE TODOS ES ESTO:

// AUTOLOADER

// spl_autoload_register (function ($ class_name) {

// ESTE AUTO INCLUYE TODAS LAS CLASES NECESARIAS PARA VISTAS, MODELOS, HERRAMIENTAS, PRUEBAS Y CARPETAS ALFA //

$ dirs = array (

‘./m0/’, // MODELOS AUTOMÁTICOS INCLUSIÓN AUTOMÁTICA

‘./a1/’, // SESIONES, BASE DE DATOS, VALIDADOR, SESIONES DE ASESINATO ETC. AGREGUE A SUS MODELOS DONDE SE REQUIERA

‘./t0/’, // CLASES DE HERRAMIENTAS

‘./test/’, // TEST UNIT-TEST CLASS SI UTILIZA TEST

);

// HACEMOS POR CADA DIRECTORIO LISTADO PARA CLASES E INCLUIMOS TODOS LOS AUTO

// SI ENCUENTRA UNA CLASE NOMBRADA LA MISMA EN CUALQUIER DIRECTORIO, LO IGNORARÁ POR REQUISITO_ONCE //

foreach ($ dirs como $ dir) {

if (file_exists ($ dir. ”. strtolower ($ class_name). ‘. php’)) {

require_once ($ dir. ”. strtolower ($ class_name). ‘. php’);

regreso;

}

}

});

Cambie mi a1, m0, t0, prueba, directorio vars para que se ajuste al suyo. ¿Qué hará esto? Bueno, hace que la magia suceda. Permite que cualquiera o todas las clases ubicadas en la lista de funciones dir se analicen automáticamente sin necesidad de llamar al nombre de la clase en cualquier lugar dentro de su sitio MVC. Guarda esto. Haz dos si lo necesitas. Incluya esto justo encima de su controlador principal y enrutadores. Requerir una vez es muy importante también, así que no lo cambie. Solo abrirá una instancia de una clase cuando vea o lea una segunda clase llamada igual, la ignorará y no arrojará ningún error. Disfrutar.

Debe conocer y comprender la arquitectura de otros marcos MVC comunes para poder evitar los errores y, por otro lado, no “reinventar la rueda”.