amazing79/simplex

Implementacion del framework mediante el tutorial de symfony mas un bonus

Installs: 2

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Type:project

pkg:composer/amazing79/simplex

v2.3.0 2025-10-20 12:17 UTC

This package is auto-updated.

Last update: 2025-10-20 12:22:59 UTC


README

Build Total Downloads Latest Stable Version License

Proyecto base en PHP con estructura mínima de carpetas (app, src, config, public, test ), pensado para iniciarlo rápido con Composer.

🚀 Instalación

Podés crear un nuevo proyecto a partir de este template con:

  composer create-project amazing79/simplex [nombre_proyecto]

Idea

La idea fue replicar el tutorial Create your own Framework de Symfony. Con esta base, se propuso ajustar el framework para actualizar pequeñas aplicaciones que teniamos en php plano y mejorarlas sin la necesidad de requerir a frameworks gigantescos como laravel o láminas.

Segun el tutorial, tenemos dos puntos importantes:

  • Un framework funcional con poco codigo
  • Un Framework funcional pero que termina siendo un wrapper de la clase HttpKernel de Symfony

Se optó por continuar el desarrollo desde el primer punto pero agregando algunas funcionalidades más:

  • Se agregó libreria para soporte de archivos .env phpdotenv
  • Se agregó soporte de Inyectores de dependencias PHP-DI
  • Cambiar el punto de acceso de la App de /web/front.php a /public/index.php.
  • Como chiche, se incluyo un archivo ".htaccess_example" para reescribir las rutas de la app y cambiar el index.php/url por /url. Esto es opcional.
  • El framework consta con test propios para validar que funcione ante eventuales cambios.
  • Además, agregamos algunos scripts dentro de la configuracion de composer.

Para empezar a programar

Si querés empezar a programar, acordate de configurar lo siguiente (siempre y cuando lo necesites):

  • Modelos
  • Base de datos
  • Otras configuraciones necesarias

Esto después lo agregas en los injectores de dependencias (dentro de config, hay algunos ejemplos) y ¡¡guala!!. Recordá agregar estas configuraciones desde tu punto de acceso a la app, es decir public/index.php.

Personalización

Recordá que este framework es personalizable, por lo cual si querés agregarle cosas al framework, hazlo a tu gusto. Podrás encontrar el código dentro del directorio src/. Todo lo demás, colocalo dentro de app/.

El funcionamiento es similar a otros frameworks. Aunque en el tutorial se seguía un enfoque orientado a Response/Request, se lo llevo a un enfoque MVC. Para entender un poco como funciona, se agregó un controller (IndexController) como también algunas plantillas de ejemplo (welcome, layout y error). Estas editar a gusto.

Nota Para entender mejor el funcionamiento de los objetos Response y Request, ver la documentación de Symfony

Además, dentro de los scripts podemos:

Probar la app de bienvenida

  composer start

Correr los tests del framework

  composer tests

Modo de trabajo

Se incluyo un ejemplo de una página index con su controlador, a modo de entender un poco el funcionamiento. En corto:

  • Configurar las dependencias según necesitemos (modelos, nuevos eventos, etc.).
  • Reemplazar template de IndexController (welcome) y usar uno propio (también podemos editarlo, como prefieras).
  • La metodologia es el patron MVC. Seguir este enfoque, y guardar los scripts en sus respectivas carpetas según su proposito.
  • Los tests actualmente están funcionando, pero solo verifican el funcionamiento del framework desde el punto base. Modificaciones al framework por parte de uno podria incluir modificar los tests.
  • Se modificó parte del codigo del tutorial para trabajar con Inyectores de dependencias y asi ser más flexible la configuracion del framework.
  • Se provee un layout de ejemplo para ver como simplificar el codigo de nuestras vistas. Por lo tanto, para renderizar html contaremos con dos estrategias (HtmlRender y HtmlLayoutRender).
    • En el primero podremos incluir en la plantilla todo el html del documento.
    • En el segundo, las vistas solo necesitan contener html de la página a renderizar, esta luego se incorpora al layout mediante su propiedad {{content}}. Para acceder al mismo, podemos ingresar en la siguiente ruta: [ruta_principal/layout]. Ejemplo: http://localhost/layout. Para personalizar el layout, ir a la carpeta Views/layout/
  • Se agregó api para manejo de sesiones. Para mayor compatibilidad, se creó usando las interfaces nativas de php. Además, se agregó un controller base para extender en aquellos controladores que necesiten acceder a la session (este controller base emplea un trait)

Para marcar un punto personal desde donde empezamos a usarlo como framework, largamos la release de la version v2.0.0. Con esta version procedimos a actualizar un par de apps. Nuevamente, este framework tiene objetivo facilitarnos la actualización de sistemas viejos hechos con php plano.

Para desarrollar apps más complejas, usar otros frameworks.

Agregados importantes

  • Se agregó soporte de sesiones. Se crearon clases implementando interfaces nativas para tal fin.
  • Las sesiones se pueden almacenar en el directorio temporal (por default), o configurarla guardar las mismas dentro de storage/sessions (usar valor en archivo .env). Además, dentro de storage/app podremos almacenar otra info que veamos necesaria. Usar a conveniencia.
  • Se agregó controlador base de sesiones para ser extendido por aquellos controladores que lo necesiten.
  • Se agregaron nuevos eventos para escuchar por listener. Estos son Request, exception, y not_authorized.
  • Con los eventos y las sesiones, se pueden crear listener para proteger accesos no autorizados, entre otras cosas.
  • Se reestructuró organización de controladores, para tener más sentido. Ahora se proveen 2 controladores extensibles.
  • Se agregó nuevo controller para facilitar la modificación del controlador principal sin que esto afecte a los tests.

Clase Handler para el manejo de sesiones en archivos

Clase SessionManager para acceder facilmente a la sesion en formato orientado a objetos.

Trait para reutilizar la clase SessionManager en otras clases o controladores.

Clase AbstractSessionController extendible, el cual utiliza el trait anterior. Esto evita tener que incorporar el trait en todos los controladores.

🧠 Autor

Ignacio Jauregui — GitHub