Guía práctica para habilitar PSR-4 en CodeIgniter 3 y preparar el proyecto para usar inyección de dependencias real.
Aunque CodeIgniter 3 no fue diseñado con inyección de dependencias en mente, es totalmente posible integrarla si configuramos PSR-4 en composer.json y organizamos nuestro código fuera de application/. Esto permite escribir servicios testeables, desacoplados y reutilizables.
Creamos un namespace propio para los servicios:
{
"autoload": {
"psr-4": {
"AppServices\\": "application/services/"
}
}
}
Ejecutamos:
composer dumpautoload
Creamos el directorio application/services/.
Ejemplo típico: un servicio para enviar mensajes transaccionales.
<?php
namespace AppServices;
use GuzzleHttp\Client;
final class MessageSender
{
public function __construct(
private Client $httpClient
) {}
public function send(string $phone, string $text): bool
{
$response = $this->httpClient->post('https://api.sms.local/enviar', [
'json' => [
'telefono' => $phone,
'mensaje' => $text,
]
]);
return $response->getStatusCode() === 200;
}
}
CodeIgniter 3 no resuelve dependencias automáticamente, así que las instanciamos:
<?php
use AppServices\MessageSender;
use GuzzleHttp\Client;
class Notificaciones extends CI_Controller
{
public function enviar()
{
$sender = new MessageSender(new Client());
$ok = $sender->send('1130004455', 'Tu pago fue aprobado');
echo $ok ? 'OK' : 'Error';
}
}
Este enfoque permite sacar lógica del controlador, mejorar testeo y aplicar DI aunque el framework sea legacy.
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.