Como criar e executar um projeto CodeIgniter
O que é CodeIgniter?
CodeIgniter é um framework PHP para desenvolvimento web leve e de alto desempenho. Ele segue o padrão de arquitetura Model-View-Controller (MVC), oferecendo aos desenvolvedores uma maneira rápida e eficiente de construir aplicações web ricas em funcionalidades. Graças à sua estrutura enxuta, ótimo desempenho e facilidade de aprendizado, CodeIgniter é a escolha preferida de muitos desenvolvedores PHP.
Principais características e vantagens do CodeIgniter
- Núcleo leve: O sistema central do CodeIgniter é extremamente enxuto, incluindo apenas os componentes essenciais para execução, o que garante alta velocidade de carregamento.
- Desempenho superior: A arquitetura do framework prioriza eficiência, capaz de lidar com grande volume de solicitações simultâneas e entregar excelente performance.
- Facilidade de uso: Sua documentação clara e APIs intuitivas reduzem a curva de aprendizado, permitindo que desenvolvedores avancem rapidamente.
- Alta flexibilidade: Permite integração livre de bibliotecas de terceiros conforme a necessidade do projeto, facilitando customizações e expansões das funcionalidades.
- Comunidade ativa: Possui uma base de desenvolvedores grande e engajada, oferecendo diversos recursos e suporte técnico.
CodeIgniter é adequado para demandas de desenvolvimento que vão desde pequenos projetos até aplicações empresariais de grande porte, auxiliando desenvolvedores a construírem soluções web eficientes e de alta qualidade.
Configurando o ambiente de desenvolvimento CodeIgniter com ServBay
ServBay é uma ferramenta para ambientes locais de desenvolvimento web desenhada para macOS e Windows. Ele integra diversos pacotes, como PHP, bancos de dados (MySQL, PostgreSQL, MongoDB), serviços de cache (Redis, Memcached) e servidores web (Caddy, Nginx, Apache), além de oferecer uma interface de gerenciamento prática. Com ServBay, você pode configurar e administrar facilmente todo o ambiente necessário para trabalhar com CodeIgniter.
Neste guia, você vai aprender como utilizar o ambiente PHP e o recurso de sites do ServBay para criar, configurar e executar um projeto CodeIgniter, além de integrar múltiplos bancos de dados e serviços de cache.
Pré-requisitos
Antes de começar, certifique-se de que:
- Você já instalou e está executando ServBay no macOS ou Windows.
- A versão do PHP desejada está habilitada no ServBay (por exemplo, PHP 8.3).
- Os bancos de dados e serviços de cache que você planeja usar estão habilitados no ServBay (por exemplo, MySQL, PostgreSQL, Redis, Memcached).
Criando um projeto CodeIgniter
ServBay recomenda que seus projetos de websites sejam armazenados nos seguintes diretórios, o que facilita o gerenciamento dos sites locais:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Instalando o Composer
O ServBay já vem com o Composer pré-instalado; normalmente, você não precisa instalar manualmente. Basta usar o comando
composer
no terminal.Acessando o diretório raiz do site
Abra o terminal e navegue até o diretório recomendado do ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Criando o projeto CodeIgniter
Use o Composer para criar um novo projeto CodeIgniter 4. O diretório do projeto será chamado
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1O Composer fará o download da estrutura inicial do CodeIgniter e suas dependências no diretório
servbay-codeigniter-app
.Acessando o diretório do projeto
Entre no diretório do projeto CodeIgniter recém-criado:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Configuração inicial
Configurando a conexão com banco de dados
As configurações de banco de dados do CodeIgniter ficam no arquivo app/Config/Database.php
. Antes de usar um banco de dados, defina os dados de conexão nesse arquivo.
Primeiramente, se você planeja usar um banco de dados, crie um banco com o nome servbay_codeigniter_app
usando as ferramentas de administração do ServBay (como Adminer ou phpMyAdmin, acessíveis pela interface do ServBay).
Depois, edite o arquivo app/Config/Database.php
, localize o array $default
e preencha as informações conforme o tipo de banco habilitado no ServBay (por exemplo, MySQL ou PostgreSQL). Os usuários e senhas padrão do ServBay são geralmente root
e password
.
Exemplo de configuração para MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // O banco do ServBay geralmente 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', // Defina "MySQLi" ou "Pdo" de acordo com o banco usado
'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
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Para PostgreSQL, defina DBDriver
como 'Postgre'
, a porta normalmente é 5432
e os parâmetros de charset podem variar e pedir ajustes.
Configurando conexão de cache (Memcached/Redis)
Se você utilizar Memcached ou Redis para cache, configure no arquivo app/Config/Cache.php
.
Edite o arquivo app/Config/Cache.php
e localize o trecho para configuração. O Memcached do ServBay escuta na porta padrão 11211
, o Redis na 6379
, e geralmente não exige senha.
Exemplo de configuração para Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcached escuta em 127.0.0.1
'port' => 11211, // Porta padrão do Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Exemplo para Redis:
php
public string $handler = 'redis'; // Define o Redis como handler padrão
public $default = [ // Configuração do Redis normalmente neste array
'host' => '127.0.0.1', // ServBay Redis escuta em 127.0.0.1
'password' => null, // ServBay Redis sem senha por padrão
'port' => 6379, // Porta padrão do Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Certifique-se de ajustar o trecho correto conforme o pacote de cache habilitado.
Configurando o servidor web (Sites do ServBay)
Use o recurso sites do ServBay para configurar o servidor web e apontar para seu projeto CodeIgniter.
- Abra a interface do aplicativo ServBay.
- Navegue até a aba Sites (Websites).
- Clique no botão
+
no canto inferior esquerdo para adicionar um novo site. - Preencha os dados:
- Nome: Escolha um nome fácil de identificar, como
Meu Primeiro Projeto CodeIgniter
. - Domínio: Defina um domínio local para acessar no navegador, por exemplo
servbay-codeigniter-test.local
. O ServBay resolve domínios.local
automaticamente. - Tipo de site: Selecione
PHP
. - Versão PHP: Escolha a desejada, por exemplo
8.3
. - Diretório raiz: Atenção! O arquivo de entrada do CodeIgniter (
index.php
) está na pastapublic
do projeto. Portanto, o diretório raiz precisa ser definido como o caminho até a pastapublic
:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Nome: Escolha um nome fácil de identificar, como
- Clique em Adicionar (Add) para salvar.
- Caso o ServBay peça para aplicar as alterações, confirme.
Para ver os passos detalhados, consulte Adicionando o primeiro site.
Adicionando código de exemplo
Para testar o funcionamento do seu projeto e das integrações com banco de dados e cache, vamos modificar o controlador padrão Home
do CodeIgniter e adicionar alguns métodos exemplos.
Edite o arquivo app/Controllers/Home.php
e substitua seu conteúdo pelo código abaixo:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Importe classe de exceção de banco
use CodeIgniter\Cache\Exceptions\CacheException; // Importe classe de exceção de cache
class Home extends Controller
{
/**
* Método padrão da página inicial
*/
public function index(): string
{
// Retorna uma mensagem de boas-vindas simples
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Exemplo com 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) {
// Captura erros relacionados ao cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Captura outros erros eventuais
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Exemplo com 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) {
// Captura erros relacionados ao cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Captura outros erros eventuais
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Insere dados de usuário no banco (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Verifica se a tabela 'users' existe (medida preventiva)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Insere os dados
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Gera email único com time()
];
$db->table('users')->insert($data);
// Checa se o insert foi bem-sucedido (opcional)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Captura erros relacionados ao banco de dados
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Captura outros erros eventuais
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Lista usuários do banco (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.';
}
// Seleciona todos os 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 JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Captura erros relacionados ao banco de dados
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Captura outros erros eventuais
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
}
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
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
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
O controlador acima traz retornos claros e tratamento básico de erros para facilitar o diagnóstico de problemas.
Configurando rotas
Para acessar os métodos exemplos adicionados ao controlador Home
, é necessário definir as rotas correspondentes no arquivo de rotas do CodeIgniter.
Edite o arquivo app/Config/Routes.php
e, na definição de $routes
, adicione as seguintes linhas:
php
// ... outras regras de rota ...
// Rota para exemplo Memcached
$routes->get('/memcached', 'Home::memcached');
// Rota para exemplo Redis
$routes->get('/redis', 'Home::redis');
// Rotas para exemplo banco de dados
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... outras regras de rota ...
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Certifique-se de inserir essas rotas dentro das definições existentes, sem remover regras já presentes.
Acessando o site
Seu projeto CodeIgniter agora está configurado e rodando no ServBay. Abra o navegador e utilize o domínio definido anteriormente para acessar:
Página inicial:
https://servbay-codeigniter-test.local
Você deve visualizar a mensagemHello ServBay and CodeIgniter!
, indicando que o site está ativo via ServBay.Exemplo Memcached:
https://servbay-codeigniter-test.local/memcached
Se o serviço Memcached estiver funcionando corretamente, o retorno será semelhante aMemcached Test Success: Hello Memcached from CodeIgniter!
.Exemplo Redis:
https://servbay-codeigniter-test.local/redis
Se o Redis estiver ok, o retorno será semelhante aRedis Test Success: Hello Redis from CodeIgniter!
.
Exemplos de operação com banco de dados (MySQL/PostgreSQL)
Para utilizar os exemplos com banco de dados, é preciso rodar o comando de migração do CodeIgniter para criar a tabela users
.
Estrutura do banco de dados (migração)
No terminal, acesse o diretório do projeto CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Crie o arquivo de migração: Use a ferramenta de CLI do CodeIgniter para gerar a migração da tabela
users
:bashphp spark make:migration create_users_table
1Isso vai gerar um arquivo PHP em
app/Database/Migrations
.Edite o arquivo de migração: Localize o novo arquivo criado (
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) e edite o métodoup()
para definir as colunas e índices da tabela. Atenção: MySQL e PostgreSQL usam sintaxes diferentes para os campos de timestamp (CURRENT_TIMESTAMP
vsNOW()
). ORawSql
do CodeIgniter ajuda a contornar isso. Exemplo:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Importe 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, // Campo de e-mail único ], 'created_at' => [ 'type' => 'TIMESTAMP', // Definição dinâmica conforme o banco // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), ], '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()'), ], ]); $this->forge->addKey('id', true); // Chave primária $this->forge->createTable('users'); // Criação da tabela } public function down() { // Para desfazer a migração e apagar a tabela $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 utiliza uma lógica simples para definir automaticamente o valor padrão conforme o banco usado. Em projetos maiores, pode ser necessário atualizar a estratégia de migração ou manter arquivos distintos para cada SGBD.
Rodando a migração: Execute o comando no terminal para criar a tabela:
bashphp spark migrate
1Se tudo correr bem, você verá uma mensagem de sucesso. Você também pode checar pelo Adminer se a tabela foi criada no banco
servbay_codeigniter_app
.
Acessando os exemplos de banco de dados
Com a conexão configurada em app/Config/Database.php
e a tabela criada pela migração, acesse:
Adicionando usuário:
https://servbay-codeigniter-test.local/add-user
A cada acesso, será inserido um novo usuário na tabela. O retorno será algo comoUser added successfully: user_XXXXXXXXXX@servbay.demo
.Listando usuários:
https://servbay-codeigniter-test.local/list-users
Esta rota retorna todos os registros da tabelausers
em JSON.
Conclusão
Seguindo este tutorial, você foi capaz de criar, configurar e executar um projeto CodeIgniter no ServBay (macOS ou Windows). Viu como criar o projeto via Composer, configurar o recurso de sites do ServBay para apontar corretamente para o diretório público, integrar e configurar banco de dados e serviços de cache no CodeIgniter, e testar tudo com exemplos práticos. O ServBay simplifica o processo de configuração e gerenciamento do ambiente local, permitindo que você foque no desenvolvimento da sua aplicação CodeIgniter.