Volver al blog CodeIgniter 3

Inyección de dependencias en CodeIgniter 3 para APIs modernas

Usar DI con servicios PSR-4 para modernizar APIs en CI3.

18 noviembre 2025
laravel API Rest

Cuando CI3 se usa como backend de APIs modernas, es clave que la lógica esté desacoplada del framework. Con PSR-4 y DI, podemos construir servicios sólidos y migrables.

1. Caso real: API de pagos

Supongamos una API que debe validar pagos con Mercado Pago y actualizar el estado de una orden.

Creamos application/services/Payments/.

2. Servicio de validación

<?php

namespace Payments;

use GuzzleHttp\Client;

final class PaymentValidator
{
    public function __construct(
        private Client $httpClient
    ) {}

    public function validate(string $paymentId): array
    {
        $res = $this->httpClient->get(
            "https://api.mercadopago.com/v1/payments/{$paymentId}"
        );

        return json_decode($res->getBody()->getContents(), true);
    }
}

3. Servicio de negocio

<?php

namespace Payments;

use CI_DB_query_builder;

final class PaymentProcessor
{
    public function __construct(
        private CI_DB_query_builder $db,
        private PaymentValidator $validator
    ) {}

    public function process(string $paymentId): bool
    {
        $data = $this->validator->validate($paymentId);

        if ($data['status'] !== 'approved') {
            return false;
        }

        return $this->db
            ->where('payment_id', $paymentId)
            ->update('ordenes', ['estado' => 'pagado']);
    }
}

4. Controlador API

<?php

use Payments\PaymentValidator;
use Payments\PaymentProcessor;
use GuzzleHttp\Client;

class Pagos extends CI_Controller
{
    public function validar()
    {
        $validator = new PaymentValidator(new Client());
        $service = new PaymentProcessor($this->db, $validator);

        $ok = $service->process($this->input->post('id'));

        echo json_encode(['ok' => $ok]);
    }
}

Este patrón permite modernizar APIs sin romper la base legacy y sin necesidad de una reescritura total.