Mi caja de herramientas para PHP

Desde hace algunos meses he estado intentando encontrar el punto perfecto para desarrollar con PHP sin usar ningún framework como Laravel o CodeIgniter.

Como desarrolladores, queremos algo que sea sólido, fácil de usar y confiable; además de que tenga rica documentación y su uso sea entendible.

Hoy vengo a presentar mi caja de herramientas que uso al desarrollar con PHP, la cual podría ser llamada framework.

También quiero mostrar cómo es que se pueden juntar las herramientas para tener una base sólida de desarrollo con PHP.

Nota: puedes ver la plantilla en GitHub.

Mi plantilla para desarrollar con PHP

He decidido usar los siguientes elementos.

Phroute para las rutas

Para tener un enrutador ligero y fácilmente configurable he usado phroute, pues permite los 4 verbos HTTP además de que es una librería ligera que soporta filtros (algo parecido a un middleware)

Twig para las vistas

Twig es un motor de plantillas seguro y con una larga presencia en el mundo del desarrollo web.

Es un simple motor como Blade, que permite hacer mejores plantillas de diseño. Nos olvidamos del include y de los bloques <?php echo $algo ?>

PHPMailer para los correos

Toda aplicación web en la nube que permita registro de usuarios necesita enviar correos de verificación; pues bien, PHPMailer viene como anillo al dedo cuando se trata de enviar correos electrónicos con facilidad.

Lo que me gusta es cómo se puede combinar con otros frameworks, por ejemplo, Twig, para obtener el HTML.

Valitron para la validación de formularios

Valitron es una librería de PHP que sirve para validar datos. Permite obtener los errores de validación como arreglo, es ligera, no tiene dependencias y simple.

PDO para la base de datos

Ya sé que PDO no es una librería de PHP, pero hace falta mencionar que uso este driver de PHP para interactuar con las bases de datos.

Bootstrap 4 para el diseño

No se está forzado a usar Bootstrap, pues las plantillas son totalmente modificables, sin embargo el código existente sugiere Bootstrap 4.

Un archivo env

Las credenciales y otros datos que no pueden ser puestos públicamente están dentro de un archivo env.php

En el mismo también controlamos otros aspectos como el caché de Twig o las direcciones de correo del remitente.

Composer para las dependencias

Todas las dependencias son manejadas con Composer, y mi propio código también es cargado de esta manera.

Sesiones en la base de datos

Las sesiones son almacenadas en la base de datos, y gracias a que se cuenta con un manejador propio, se puede saber a qué usuario le pertenece cada sesión, permitiendo cerrarla remotamente.

No hay ORM

No he utilizado ningún ORM, todas las consultas son “a mano”. Obviamente esto podría cambiarse al instalar una librería para ello.

Un enfoque MVC

Para juntar todas estas tecnologías se utiliza composer, mi código también es cargado de esta forma.

Los controldores y modelos viven dentro de la carpeta app:

Ambos son automáticamente cargados por Composer.

El controlador se encarga de procesar y validar los datos con Valitron, para llamar a los modelos y finalmente redireccionar a las vistas con o sin datos flash de sesión.

Extender plantillas con Twig

Las vistas heredan de una plantilla maestra:

La misma incluye otros componentes. Pero ahora veamos cómo es que otra plantilla se basa en esta maestra:

Simplemente la extendemos, y automáticamente incluirá la barra de navegación junto con el pie y otros estilos.

Mis clases

Apenas he creado dos clases mías, una llamada Redirect (que se encarga de hacer redirecciones y poner datos flash en la sesión) y otra llamada Validator, que valida los datos y si algo falla redirige hacia atrás (basada en Valitron).

La de Validator es incluso más corta:

Servicios

Tengo los servicios de sesión o de seguridad, que se encargan simplemente de encerrar funciones útiles, traer la sesión o la base de datos.

Modo de uso

Para usar esta plantilla, hay que clonarla desde GitHub. Después hay que configurar el archivo env.php

Por defecto tiene soporte para el registro de usuarios.

Comenzamos agregando rutas en el archivo rutas.php:

Cada ruta se corresponde con un método de controlador. Ahora creamos un controlador, por ejemplo:

Y ese controlador puede llamar a varios o un modelo. Por ejemplo el modelo de los usuarios:

Recuerda que en varias ocasiones se invoca al método view, definido en el index:

La clase Twig es de servicios y proporciona una instancia de Twig que renderiza la plantilla con los datos que le sean pasados.

Cosas faltantes

Sé que faltan algunas cosas, por ejemplo:

  • Middleware
  • Token CSRF
  • Definición de clases padres (por ejemplo, clase Modelo)
  • Autocarga de componentes (por ejemplo, la base de datos)

Conclusión

La ventaja de todo esto es que cualquiera que conozca los componentes y librerías puede trabajar con esta plantilla o caja de herramientas, ya que no obliga a tener un paradigma de programación.