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:
class Clientes extends CI_Controller {
parent::__construct();
$this->load->model('Cliente_model');
}
$data['clientes'] = $this->Cliente_model->get_all();
$this->load->view('clientes/index', $data);
}
$this->load->view('clientes/adicionar');
}
}
?>
Exemplo de Model:
class Cliente_model extends CI_Model {
$query = $this->db->get('clientes');
return $query->result();
}
return $this->db->insert('clientes', $dados);
}
}
?>
Exemplo de View (clientes/index.php):
<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
├── Controllers/
│ └── Clientes.php
├── Models/
│ └── Cliente_model.php
├── Views/
│ └── clientes/
│ ├── index.php
│ ├── adicionar.php
│ └── editar.php
Controller: Clientes.php
class Clientes extends CI_Controller {
parent::__construct();
$this->load->model('Cliente_model');
$this->load->library('form_validation');
}
$data['clientes'] = $this->Cliente_model->get_all();
$this->load->view('clientes/index', $data);
}
$this->form_validation->set_rules('nome', 'Nome', 'required|min_length[3]');
$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
$this->load->view('clientes/adicionar');
} else {
$dados = [
'nome' => $this->input->post('nome'),
'email' => $this->input->post('email')
];
$this->Cliente_model->insert($dados);
redirect('clientes');
}
}
$data['cliente'] = $this->Cliente_model->get_by_id($id);
$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
$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');
}
}
$this->Cliente_model->delete($id);
redirect('clientes');
}
}
?>
Model: Cliente_model.php
class Cliente_model extends CI_Model {
$query = $this->db->get('clientes');
return $query->result();
}
$query = $this->db->get_where('clientes', ['id' => $id]);
return $query->row();
}
return $this->db->insert('clientes', $dados);
}
$this->db->where('id', $id);
return $this->db->update('clientes', $dados);
}
$this->db->where('id', $id);
return $this->db->delete('clientes');
}
}
?>
Views Integradas com Bootstrap
Template Base (template.php)
<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->section('content') ?>
<h1>Clientes</h1>
<a href="<?= site_url('clientes/adicionar') ?>" class="btn btn-success">Adicionar Cliente</a>
</div>
<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>
Adicionar Cliente (adicionar.php)
<?= $this->section('content') ?>
<?php if(validation_errors()): ?>
<div class="alert alert-danger"><?= validation_errors(); ?></div>
<?php endif; ?>
<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>
Editar Cliente (editar.php)
<?= $this->section('content') ?>
<?php if(validation_errors()): ?>
<div class="alert alert-danger"><?= validation_errors(); ?></div>
<?php endif; ?>
<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>
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.