Cómo Sobrescribir o Extender Clases en CodeIgniter 4.5: Caso Práctico con DataTables
En muchos proyectos de desarrollo web con CodeIgniter 4, nos encontramos con la necesidad de modificar o extender clases de terceros sin alterar el código fuente original. Esto es especialmente común al trabajar con bibliotecas como Hermawan\DataTables, ampliamente utilizada para integrar DataTables con Eloquent y Query Builder.
Uno de los escenarios más comunes es sobrescribir la clase DataTableColumnDefs
, ya sea para agregar soporte adicional (como compatibilidad con PostgreSQL) o personalizar cómo se gestionan las columnas y filtros de búsqueda.
En este artículo te mostraré cómo sobrescribir o extender esta clase correctamente en CodeIgniter 4.5, sin comprometer la mantenibilidad de tu proyecto.
🔍 ¿Por qué deberías sobrescribir una clase?
Modificar directamente los archivos de una librería externa puede parecer una solución rápida, pero es una mala práctica. Estas son algunas razones para evitarlo:
-
❌ Pierdes la capacidad de actualizar el paquete con Composer.
-
❌ Rompes el principio de separación de responsabilidades.
-
✅ Extender o sobrescribir desde tu propia aplicación es más limpio y seguro.
🧱 Ejemplo: DataTableColumnDefs
La clase Hermawan\DataTables\DataTableColumnDefs
es responsable de definir las columnas que serán procesadas por la tabla, sus alias, si son ordenables, buscables, etc.
Supongamos que quieres modificar el método getSearchable()
para agregar compatibilidad con PostgreSQL (por ejemplo, usando CAST
a texto y comillas dobles).
✅ Opción 1: Extender la clase original
Paso 1: Crea una nueva clase en app/Libraries
Paso 2: Usa tu clase en lugar de la original
🔁 Puedes sobrescribir cualquier otro método, como add
, remove
, o initFromBuilder
.
✅ Opción 2: Reemplazar completamente la clase original
⚠️ Solo se recomienda si estás seguro de que no actualizarás el paquete regularmente.
Paso 1: Copia la clase original a app/Libraries/DataTableColumnDefs.php
Paso 2: Cambia el namespace
Paso 3: Modifica lo que necesites
Paso 4: Usa tu versión
✅ Opción 3: Sobrescribir vía Composer Autoload
Esta es una opción elegante y avanzada si necesitas que tu clase se cargue en lugar de la original sin cambiar el nombre.
Paso 1: Edita composer.json
Paso 2: Crea el archivo sobrescrito
app/Overrides/DataTables/DataTableColumnDefs.php
Paso 3: Copia el contenido original, modifica lo necesario
Paso 4: Ejecuta:
✨ ¡Listo! CodeIgniter usará tu versión personalizada sin modificar el paquete original.
🎯 Conclusión
Sobrescribir o extender clases en CodeIgniter 4.5 te da la flexibilidad de adaptar librerías a tus necesidades sin sacrificar actualizaciones futuras o buenas prácticas de desarrollo. Ya sea para añadir soporte a PostgreSQL, cambiar la lógica de filtrado o mejorar la compatibilidad con tus modelos, hacerlo correctamente asegura que tu aplicación sea más escalable y mantenible.
Comentarios
Publicar un comentario