Bem-vindo ao Blog da DMarkInfo

Conteúdos e novidades sobre Tecnologia da Informação.

Minha Experiência com CodeIgniter: Características, Exemplos e Evolução

Postado por Eduardo Marques em 14/12/2025
Minha Experiência com CodeIgniter: Características, Exemplos e Evolução

Quando comecei a trabalhar com desenvolvimento web profissional, o CodeIgniter foi o primeiro framework PHP que utilizei para projetar um sistema de grande porte. Na época, precisava de uma solução que fosse leve, rápida e fácil de aprender, mas que ao mesmo tempo oferecesse recursos robustos para organizar um projeto complexo. O CodeIgniter me proporcionou exatamente isso, permitindo estruturar o sistema de forma clara, utilizando o padrão MVC (Model-View-Controller) e mantendo a performance do aplicativo.

Principais Características do CodeIgniter

O CodeIgniter é conhecido por ser um framework leve, rápido e intuitivo. Algumas das características que mais me chamaram atenção incluem:

  • Arquitetura MVC (Model-View-Controller): Permite separar lógica de negócio, apresentação e dados, tornando o código mais organizado e fácil de manter.

  • Performance: Por ser um framework minimalista, não carrega bibliotecas desnecessárias, garantindo rapidez mesmo em sistemas complexos.

  • Fácil aprendizado: Sua documentação é clara e objetiva, ideal para desenvolvedores iniciantes ou para quem vem de PHP procedural.

  • Suporte a bibliotecas nativas: Inclui recursos integrados para manipulação de banco de dados, sessões, envio de e-mails, formulários, validação e uploads de arquivos.

  • Flexibilidade: É possível carregar apenas os componentes que você precisa, sem sobrecarregar o projeto.

Estrutura e Exemplos de Código

Um dos aspectos mais práticos do CodeIgniter é a sua forma simples de lidar com Models, Views e Controllers.

Exemplo de Controller:

<?php
class Clientes extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('Cliente_model');
    }
    public function index() {
        $data['clientes'] = $this->Cliente_model->get_all();
        $this->load->view('clientes/index', $data);
    }
    public function adicionar() {
        $this->load->view('clientes/adicionar');
    }
}
?>

 

Exemplo de Model:

<?php
class Cliente_model extends CI_Model {
    public function get_all() {
        $query = $this->db->get('clientes');
        return $query->result();
    }
    public function insert($dados) {
        return $this->db->insert('clientes', $dados);
    }
}
?>

 

Exemplo de View (clientes/index.php):

<h1>Lista de Clientes</h1>
<ul>
<?php foreach($clientes as $cliente): ?>
    <li><?php echo $cliente->nome; ?></li>
<?php endforeach; ?>
</ul>

 

Evolução do Framework

Desde sua criação em 2006, o CodeIgniter evoluiu bastante. Inicialmente, era extremamente leve, mas com funcionalidades limitadas. Ao longo dos anos, recebeu melhorias significativas, como:

  • Suporte a PHP moderno (7+ e 8+);

  • Autoloading de classes e namespaces;

  • Segurança aprimorada, prevenindo SQL Injection e XSS;

  • Suporte a Composer, facilitando integração de pacotes externos;

  • Documentação mais completa para novos desenvolvedores.

 

Novidades da Última Versão

A última versão do CodeIgniter (4.x) trouxe diversas novidades importantes:

  • Suporte completo a namespaces e autoloading, tornando a integração com bibliotecas externas mais simples.

  • Sistema de rotas mais flexível, permitindo criar URLs amigáveis e personalizadas.

  • Sistema de testes integrado, com suporte a PHPUnit.

  • Configurações baseadas em arquivos de ambiente, facilitando o desenvolvimento em múltiplos ambientes (local, staging e produção).

  • Melhorias na performance e segurança, mantendo o framework rápido e confiável mesmo para sistemas de grande porte.

 

Implementando um CRUD Completo no CodeIgniter

Para ilustrar melhor a prática com o CodeIgniter, criei um CRUD de clientes no sistema que desenvolvi, contemplando listagem, criação, edição e exclusão, além de validação de formulário.

Estrutura do Projeto

app/
├── Controllers/
│   └── Clientes.php
├── Models/
│   └── Cliente_model.php
├── Views/
│   └── clientes/
│       ├── index.php
│       ├── adicionar.php
│       └── editar.php

 

 

Controller: Clientes.php

<?php
class Clientes extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('Cliente_model');
        $this->load->library('form_validation');
    }
    public function index() {
        $data['clientes'] = $this->Cliente_model->get_all();
        $this->load->view('clientes/index', $data);
    }
    public function adicionar() {
        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[3]');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
        if ($this->form_validation->run() === FALSE) {
            $this->load->view('clientes/adicionar');
        } else {
            $dados = [
                'nome' => $this->input->post('nome'),
                'email' => $this->input->post('email')
            ];
            $this->Cliente_model->insert($dados);
            redirect('clientes');
        }
    }
    public function editar($id) {
        $data['cliente'] = $this->Cliente_model->get_by_id($id);
        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[3]');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
        if ($this->form_validation->run() === FALSE) {
            $this->load->view('clientes/editar', $data);
        } else {
            $dados = [
                'nome' => $this->input->post('nome'),
                'email' => $this->input->post('email')
            ];
            $this->Cliente_model->update($id, $dados);
            redirect('clientes');
        }
    }
    public function excluir($id) {
        $this->Cliente_model->delete($id);
        redirect('clientes');
    }
}
?>

 

 

Model: Cliente_model.php

<?php
class Cliente_model extends CI_Model {
    public function get_all() {
        $query = $this->db->get('clientes');
        return $query->result();
    }
    public function get_by_id($id) {
        $query = $this->db->get_where('clientes', ['id' => $id]);
        return $query->row();
    }
    public function insert($dados) {
        return $this->db->insert('clientes', $dados);
    }
    public function update($id, $dados) {
        $this->db->where('id', $id);
        return $this->db->update('clientes', $dados);
    }
    public function delete($id) {
        $this->db->where('id', $id);
        return $this->db->delete('clientes');
    }
}
?>

 

 

Views Integradas com Bootstrap

Template Base (template.php)

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sistema de Clientes</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2
/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-4">
    <div class="container">
        <a class="navbar-brand" href="<?= site_url('clientes') ?>">Sistema de Clientes</a>
    </div>
</nav>
<div class="container">
    <?= $this->renderSection('content') ?>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2
/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

 

Listagem de Clientes (index.php)

<?= $this->extend('template') ?>
<?= $this->section('content') ?>
<div class="d-flex justify-content-between align-items-center mb-3">
    <h1>Clientes</h1>
    <a href="<?= site_url('clientes/adicionar') ?>" class="btn btn-success">Adicionar Cliente</a>
</div>
<table class="table table-striped table-hover">
    <thead class="table-primary">
        <tr>
            <th>ID</th>
            <th>Nome</th>
            <th>E-mail</th>
            <th>Ações</th>
        </tr>
    </thead>
    <tbody>
    <?php foreach($clientes as $cliente): ?>
        <tr>
            <td><?= $cliente->id ?></td>
            <td><?= $cliente->nome ?></td>
            <td><?= $cliente->email ?></td>
            <td>
                <a href="<?= site_url('clientes/editar/'.$cliente->id) ?>" class="btn btn-warning btn-sm">Editar</a>
                <a href="<?= site_url('clientes/excluir/'.$cliente->id) ?>" class="btn btn-danger btn-sm" 
                   onclick="return confirm('Deseja realmente excluir este cliente?');">Excluir</a>
            </td>
        </tr>
    <?php endforeach; ?>
    </tbody>
</table>
<?= $this->endSection() ?>
 

 

Adicionar Cliente (adicionar.php)

<?= $this->extend('template') ?>
<?= $this->section('content') ?>
<h1>Adicionar Cliente</h1>
<?php if(validation_errors()): ?>
    <div class="alert alert-danger"><?= validation_errors(); ?></div>
<?php endif; ?>
<form method="post" action="">
    <div class="mb-3">
        <label for="nome" class="form-label">Nome</label>
        <input type="text" class="form-control" id="nome" name="nome" value="<?= set_value('nome'); ?>">
    </div>
    <div class="mb-3">
        <label for="email" class="form-label">E-mail</label>
        <input type="email" class="form-control" id="email" name="email" value="<?= set_value('email'); ?>">
    </div>
    <button type="submit" class="btn btn-primary">Salvar</button>
    <a href="<?= site_url('clientes') ?>" class="btn btn-secondary">Cancelar</a>
</form>
<?= $this->endSection() ?>
 

 

Editar Cliente (editar.php)

<?= $this->extend('template') ?>
<?= $this->section('content') ?>
<h1>Editar Cliente</h1>
<?php if(validation_errors()): ?>
    <div class="alert alert-danger"><?= validation_errors(); ?></div>
<?php endif; ?>
<form method="post" action="">
    <div class="mb-3">
        <label for="nome" class="form-label">Nome</label>
        <input type="text" class="form-control" id="nome" name="nome" value="<?= set_value('nome', $cliente->nome); ?>">
    </div>
    <div class="mb-3">
        <label for="email" class="form-label">E-mail</label>
        <input type="email" class="form-control" id="email" name="email" value="<?= set_value('email', $cliente->email); ?>">
    </div>
    <button type="submit" class="btn btn-primary">Atualizar</button>
    <a href="<?= site_url('clientes') ?>" class="btn btn-secondary">Cancelar</a>
</form>
<?= $this->endSection() ?>
 

 

Minha experiência com CodeIgniter foi extremamente positiva. Ele me permitiu desenvolver sistemas estruturados, seguros e performáticos, além de fornecer uma curva de aprendizado suave. Com o CRUD que mostrei, é possível criar um sistema real de gestão de clientes, integrado com Bootstrap para responsividade e design moderno. Mesmo com o surgimento de frameworks mais recentes como Laravel, o CodeIgniter continua sendo uma excelente opção para quem busca leveza, rapidez e simplicidade, sem abrir mão de boas práticas de desenvolvimento.

Compartilhe este post:
Voltar para a Home