Criando e Executando um Projeto CodeIgniter
O que é o CodeIgniter?
O CodeIgniter é um framework para desenvolvimento de aplicações Web em PHP, leve e de alta performance. Ele segue o padrão Model-View-Controller (MVC) e foi criado para ajudar desenvolvedores a construir rapidamente aplicações ricas em recursos. Sua estrutura enxuta, desempenho excelente e facilidade de aprendizado fizeram dele a escolha preferida de muitos programadores PHP.
Principais Características e Vantagens do CodeIgniter
- Núcleo leve: O sistema central do CodeIgniter é extremamente compacto, contendo apenas os componentes essenciais para rodar o framework e garantindo carregamento muito rápido.
- Ótima performance: O framework é projetado para eficiência, capaz de lidar com requisições de alta concorrência e oferecendo desempenho de aplicação superior.
- Fácil de aprender: Oferece documentação clara e API intuitiva, reduzindo a curva de aprendizado e permitindo que desenvolvedores comecem rapidamente.
- Alta flexibilidade: Permite a livre integração de bibliotecas de terceiros conforme a necessidade do projeto, facilitando a expansão e customização de funcionalidades.
- Comunidade ativa: Conta com uma grande e engajada comunidade de desenvolvedores, com apoio e recursos abundantes.
O CodeIgniter é indicado para desde pequenos projetos até grandes aplicações empresariais, ajudando equipes a construir soluções Web de alta qualidade com eficiência.
Configurando o Ambiente de Desenvolvimento CodeIgniter com o ServBay
O ServBay é uma ferramenta projetada para macOS que facilita a criação de ambientes locais de desenvolvimento Web. Ele já vem integrado com PHP, bancos de dados (MySQL, PostgreSQL, MongoDB), sistemas de cache (Redis, Memcached), servidores Web (Caddy, Nginx, Apache) e oferece uma interface de gestão conveniente. Com o ServBay, você pode configurar e gerenciar facilmente o ambiente necessário para rodar o CodeIgniter.
Neste tutorial, mostramos como criar, configurar e rodar um projeto CodeIgniter usando o ambiente PHP e o recurso Sites do ServBay, além de demonstrar a integração com diversos bancos de dados e serviços de cache.
Pré-requisitos
Antes de começar, faça as seguintes conferências:
- O ServBay já deve estar instalado e rodando no seu macOS.
- Selecione e ative a versão do PHP que deseja usar no ServBay (por exemplo, PHP 8.3).
- Ative no ServBay os pacotes de banco de dados e cache que pretende usar (por exemplo, MySQL, PostgreSQL, Redis, Memcached).
Criando o Projeto CodeIgniter
O ServBay recomenda que seus projetos Web sejam organizados na pasta /Applications/ServBay/www
, o que facilita o gerenciamento dos sites locais.
Instalando o Composer
O ServBay já inclui o Composer na instalação, então normalmente não é necessário instalar manualmente. Use o comando
composer
no terminal.Acessando o Diretório Raiz do Site
Abra o terminal e navegue até a pasta recomendada pelo ServBay:
bashcd /Applications/ServBay/www
1Criando o Projeto CodeIgniter
Use o Composer para criar um novo projeto CodeIgniter 4, nomeando o diretório como
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1O Composer fará o download da estrutura do CodeIgniter e suas dependências para a pasta
servbay-codeigniter-app
.Entrando na Pasta do Projeto
Navegue até o novo diretório do projeto:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
Configuração Inicial
Configurando a Conexão com o Banco de Dados
A configuração de banco de dados do CodeIgniter fica no arquivo app/Config/Database.php
. Antes de utilizar o banco, ajuste as informações de conexão nesse arquivo.
Primeiramente, crie um banco chamado servbay_codeigniter_app
usando a ferramenta de gerenciamento de banco do ServBay (Adminer ou phpMyAdmin, acessível pela interface do ServBay).
Depois, edite o arquivo app/Config/Database.php
, localize o array $default
e preencha os dados baseados no banco que está usando (por exemplo, MySQL ou PostgreSQL). O nome de usuário e senha padrão do ServBay geralmente são root
e password
.
Exemplo de configuração para MySQL:
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // O banco de dados do ServBay normalmente escuta em 127.0.0.1
'username' => 'root', // Usuário padrão do ServBay
'password' => 'password', // Senha padrão do ServBay
'database' => 'servbay_codeigniter_app', // Nome do banco criado
'DBDriver' => 'MySQLi', // Dependendo do tipo do banco, utilize MySQLi ou Pdo para MySQL
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Porta padrão do MySQL
];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Se for usar PostgreSQL, ajuste o DBDriver
para 'Postgre'
, defina a porta como 5432
e revise o charset conforme o caso.
Configurando Conexão de Cache (Memcached/Redis)
Se pretende usar Memcached ou Redis como cache, as configurações ficam no arquivo app/Config/Cache.php
.
Abra o arquivo app/Config/Cache.php
e localize a seção correspondente. O Memcached no ServBay normalmente escuta na porta 11211
, já o Redis na porta 6379
, ambos sem senha por padrão.
Exemplo de configuração para Memcached:
public $memcached = [
'host' => '127.0.0.1', // O Memcached do ServBay normalmente está em 127.0.0.1
'port' => 11211, // Porta padrão do Memcached
'weight' => 1,
];
2
3
4
5
Exemplo de configuração para Redis:
public string $handler = 'redis'; // Define redis como handler padrão de cache
public $default = [ // Config de Redis geralmente vai no array default
'host' => '127.0.0.1', // Redis do ServBay normalmente escuta em 127.0.0.1
'password' => null, // Sem senha por padrão no Redis do ServBay
'port' => 6379, // Porta padrão do Redis
'timeout' => 0,
'database' => 0,
];
2
3
4
5
6
7
8
9
Certifique-se de ajustar para o serviço de cache que estiver ativado no ServBay.
Configurando o Servidor Web (Sites no ServBay)
O recurso Sites do ServBay permite configurar o servidor Web apontando para seu projeto CodeIgniter.
- Abra o aplicativo do ServBay.
- Vá até a aba Sites.
- Clique no botão
+
no canto inferior esquerdo para adicionar um novo site. - Preencha as informações:
- Nome: Use um nome fácil de reconhecer, como
Meu Primeiro Site CodeIgniter
. - Domínio: Indique o domínio para acesso local, como
servbay-codeigniter-test.local
(o ServBay resolve .local para o seu próprio computador). - Tipo de site: Escolha
PHP
. - Versão do PHP: Selecione a versão desejada, por exemplo,
8.3
. - Root Document (Raiz do site): Ponto crucial: o arquivo de entrada do CodeIgniter (
index.php
) está dentro da pastapublic
do seu projeto. Portanto, o root do site deve ser configurado como a pastapublic
do seu projeto:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Nome: Use um nome fácil de reconhecer, como
- Clique em Adicionar (Add) para salvar.
- Caso o ServBay peça para aplicar as mudanças, confirme.
Para instruções detalhadas, veja Adicionando seu primeiro site.
Adicionando Código de Exemplo
Para verificar se o projeto está rodando e testar integração com o banco de dados e cache, vamos modificar o controlador padrão Home
do CodeIgniter e adicionar métodos de exemplo.
Edite o arquivo app/Controllers/Home.php
e substitua o conteúdo pelo seguinte código:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Importa exceções de banco de dados
use CodeIgniter\Cache\Exceptions\CacheException; // Importa exceções de cache
class Home extends Controller
{
/**
* Método padrão da página inicial
*/
public function index(): string
{
// Retorna uma mensagem simples de boas-vindas
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Exemplo de uso do Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Tenta gravar no cache
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // Cache por 60 segundos
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Tenta ler do cache
$value = $cache->get('servbay_memcached_key');
if ($value === null) {
return 'Error: Failed to get data from Memcached. Cache might have expired or service is down.';
}
return 'Memcached Test Success: ' . $value;
} catch (CacheException $e) {
// Trata exceções do cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Trata outras exceções
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Exemplo de uso do Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Tenta gravar no cache
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // Cache por 60 segundos
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Tenta ler do cache
$value = $cache->get('servbay_redis_key');
if ($value === null) {
return 'Error: Failed to get data from Redis. Cache might have expired or service is down.';
}
return 'Redis Test Success: ' . $value;
} catch (CacheException $e) {
// Trata exceções do cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Trata outras exceções
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Insere dados de usuário no banco de dados (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Verifica se a tabela 'users' existe (precaução básica)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Insere novo usuário
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Gera email único com time()
];
$db->table('users')->insert($data);
// Verifica se a inserção ocorreu (opcional)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Trata exceções de banco de dados
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Trata outras exceções genéricas
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Lista dados dos usuários no banco de dados (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Verifica se a tabela 'users' existe
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Consulta todos usuários
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Retorna a lista de usuários em formato JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Trata exceções de banco de dados
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Trata outras exceções
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Esse controlador atualizado traz saídas mais claras e tratamento de erros básico, facilitando a identificação de possíveis problemas.
Configurando Rotas
Para acessar os métodos de exemplo do controlador Home
, adicione as rotas necessárias no arquivo de rotas do CodeIgniter.
Edite o arquivo app/Config/Routes.php
. Localize onde são definidos os $routes
e inclua as seguintes regras:
// ... Outras regras de rota ...
// Rota de teste do Memcached
$routes->get('/memcached', 'Home::memcached');
// Rota de teste do Redis
$routes->get('/redis', 'Home::redis');
// Rotas para teste de banco de dados
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... Outras regras de rota ...
2
3
4
5
6
7
8
9
10
11
12
13
Adicione essas rotas sem sobrescrever as existentes.
Acessando o Site
Com o projeto configurado e rodando no ServBay, utilize o navegador para acessar pelo domínio definido anteriormente:
Página inicial:
https://servbay-codeigniter-test.local
Você deve visualizar a mensagemHello ServBay and CodeIgniter!
, o que indica que o projeto está funcionando pelo servidor Web do ServBay.Teste Memcached:
https://servbay-codeigniter-test.local/memcached
Se o serviço Memcached estiver ativo e corretamente configurado, verá a mensagemMemcached Test Success: Hello Memcached from CodeIgniter!
.Teste Redis:
https://servbay-codeigniter-test.local/redis
Com o Redis funcionando corretamente, deve verRedis Test Success: Hello Redis from CodeIgniter!
.
Exemplos de Operação com Banco de Dados (MySQL/PostgreSQL)
Antes de usar os exemplos de banco de dados, é necessário rodar as migrações do CodeIgniter para criar a tabela users
.
Criando a Estrutura do Banco (Executando Migração)
Abra o terminal e acesse o diretório do projeto CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Criando arquivo de migração: Use a ferramenta CLI do CodeIgniter para criar o arquivo de migração da tabela
users
:bashphp spark make:migration create_users_table
1O arquivo será criado em
app/Database/Migrations
.Editando a migração: Edite o novo arquivo gerado (nome semelhante a
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
). No métodoup()
, defina as colunas e índices da tabela. Lembre-se que há pequenas diferenças de sintaxe entre MySQL e PostgreSQL para campos de timestamp (CURRENT_TIMESTAMP
xNOW()
). ORawSql
do CodeIgniter pode ajudar a contornar isso. Exemplo:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Certifique-se de importar RawSql class CreateUsersTable extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'INT', 'constraint' => 5, 'unsigned' => true, 'auto_increment' => true, ], 'name' => [ 'type' => 'VARCHAR', 'constraint' => '100', ], 'email' => [ 'type' => 'VARCHAR', 'constraint' => '100', 'unique' => true, // Email como campo único ], 'created_at' => [ 'type' => 'TIMESTAMP', // Escolhe a expressão padrão conforme o tipo de banco // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Dinâmico ], 'updated_at' => [ 'type' => 'TIMESTAMP', // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' : 'NOW()'), // Dinâmico ], ]); $this->forge->addKey('id', true); // Define id como chave primária $this->forge->createTable('users'); // Cria a tabela users } public function down() { // Para rollback da migração, remove a tabela users $this->forge->dropTable('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51Observação: O exemplo acima usa uma lógica simples para ajustar o valor padrão dos timestamps conforme a plataforma. Em projetos avançados, pode ser necessário diferenciar os arquivos de migração para cada tipo de banco.
Executando a migração: No terminal, rode o comando para criar a tabela
users
:bashphp spark migrate
1Se tudo correr bem, verá a mensagem de sucesso. Você pode conferir no banco usando o Adminer dentro do ServBay.
Acessando os Exemplos de Banco
Com a configuração correta no app/Config/Database.php
e migração executada:
Para adicionar um usuário ao banco: Acesse
https://servbay-codeigniter-test.local/add-user
Cada visita a esse endereço insere um novo usuário na tabela, mostrando mensagem comoUser added successfully: [email protected]
.Para listar usuários do banco: Acesse
https://servbay-codeigniter-test.local/list-users
Essa URL retorna os registros da tabelausers
em formato JSON.
Resumo
Seguindo o passo a passo, você criou, configurou e executou com sucesso um projeto CodeIgniter no ServBay para macOS. Aprendeu a criar o projeto com Composer, configurar o site para apontar para o diretório correto, realizar a configuração do banco de dados e conectar serviços de cache, além de validar a integração com exemplos práticos. O ServBay simplifica a montagem e o gerenciamento do seu ambiente local, liberando mais tempo para se dedicar ao desenvolvimento das suas aplicações CodeIgniter.