Creare e avviare un progetto CodeIgniter
Cos’è CodeIgniter?
CodeIgniter è un framework leggero e ad alte prestazioni per lo sviluppo di applicazioni web in PHP. Basato sul modello Model-View-Controller (MVC), è pensato per aiutare gli sviluppatori a costruire rapidamente applicazioni web ricche di funzionalità. Grazie alla sua struttura semplice, all'eccellente performance e alla facilità di apprendimento, CodeIgniter è la scelta preferita da molti sviluppatori PHP.
Caratteristiche principali e vantaggi di CodeIgniter
- Core leggero: Il sistema principale di CodeIgniter è estremamente snello, include solo i componenti essenziali richiesti per il funzionamento e garantisce una velocità di caricamento molto elevata.
- Prestazioni eccellenti: È progettato per l’efficienza, gestisce richieste ad alta concorrenza offrendo grandi performance.
- Facilità d’uso: Dispone di una documentazione chiara e di API intuitive che riducono la curva di apprendimento, consentendo agli sviluppatori di padroneggiarlo rapidamente.
- Elevata flessibilità: Permette di integrare facilmente librerie di terze parti e di espandere o personalizzare le funzioni secondo le esigenze del progetto.
- Supporto da una community attiva: Vanta una vasta e vivace comunità di sviluppatori che offre risorse e supporto.
CodeIgniter è adatto sia per piccoli progetti, sia per applicazioni aziendali di grandi dimensioni, aiutando gli sviluppatori a costruire soluzioni web di alta qualità in modo efficiente.
Configurare un ambiente di sviluppo CodeIgniter con ServBay
ServBay è uno strumento pensato per facilitare lo sviluppo web locale su macOS e Windows. Include PHP, database (MySQL, PostgreSQL, MongoDB), cache (Redis, Memcached), web server (Caddy, Nginx, Apache) e offre una pratica interfaccia di gestione. Con ServBay puoi facilmente installare e gestire l’ambiente di sviluppo necessario per CodeIgniter.
Questa guida ti accompagnerà attraverso l’utilizzo di ServBay per creare, configurare e avviare un progetto CodeIgniter, mostrando come integrare vari database e servizi di caching.
Prerequisiti
Prima di iniziare, assicurati di aver completato i seguenti passaggi:
- ServBay è correttamente installato e in esecuzione su macOS o Windows.
- La versione di PHP che intendi utilizzare è abilitata in ServBay (ad es. PHP 8.3).
- In ServBay sono abilitati i package di database e caching necessari (ad es. MySQL, PostgreSQL, Redis, Memcached).
Creazione di un progetto CodeIgniter
ServBay raccomanda di conservare tutti i tuoi progetti web nelle seguenti directory, così da gestirli più facilmente:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Installa Composer
ServBay include già Composer preinstallato, quindi di norma non è necessaria l’installazione manuale. Puoi utilizzare direttamente il comando
composer
da terminale.Accedi alla directory root del sito
Apri il terminale e vai nella root consigliata da ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Crea il progetto CodeIgniter
Usa Composer per creare un nuovo progetto CodeIgniter 4. Nel nostro esempio la cartella del progetto sarà chiamata
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer scaricherà lo scheletro dell’applicazione CodeIgniter e tutte le sue dipendenze nella directory
servbay-codeigniter-app
.Accedi alla directory del progetto
Entra nella cartella del nuovo progetto CodeIgniter:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Configurazione iniziale
Configurare la connessione al database
La configurazione del database di CodeIgniter si trova nel file app/Config/Database.php
. Prima di procedere con l’uso del database, devi impostare i parametri di accesso in questo file.
Per prima cosa, se vuoi usare un database, crealo tramite lo strumento di gestione database di ServBay (ad esempio Adminer o phpMyAdmin, disponibili dalla dashboard di ServBay) con il nome servbay_codeigniter_app
.
Poi, modifica il file app/Config/Database.php
, cerca l’array $default
e imposta le credenziali in base al tipo di database che hai abilitato (ad esempio MySQL o PostgreSQL). I valori di default di ServBay per username e password sono spesso root
e password
.
Ecco un esempio di configurazione per MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // Il database ServBay di solito ascolta su 127.0.0.1
'username' => 'root', // Username predefinito di ServBay
'password' => 'password', // Password predefinita di ServBay
'database' => 'servbay_codeigniter_app', // Nome del database
'DBDriver' => 'MySQLi', // Imposta il driver secondo il tipo di database
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Porta predefinita 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
Se usi PostgreSQL, imposta DBDriver
su 'Postgre'
, la port
di default è 5432
e potresti aver bisogno di modificare le impostazioni relative al charset.
Configurare la connessione alla cache (Memcached/Redis)
Se vuoi usare Memcached o Redis per la cache, configura il file app/Config/Cache.php
.
Apri app/Config/Cache.php
, individua la sezione relativa al servizio di caching. In ServBay, Memcached di default risponde sulla porta 11211
e Redis sulla porta 6379
, spesso senza password.
Esempio di configurazione per Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // Memcached di ServBay ascolta di solito su 127.0.0.1
'port' => 11211, // Porta predefinita Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Esempio di configurazione per Redis:
php
public string $handler = 'redis'; // Imposta redis come gestore della cache
public $default = [ // Configurazione Redis
'host' => '127.0.0.1', // Redis di ServBay ascolta su 127.0.0.1
'password' => null, // Redis tipicamente senza password
'port' => 6379, // Porta predefinita Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Assicurati di configurare la sezione corrispondente al servizio di cache che hai abilitato.
Configurare il web server (impostazioni sito ServBay)
Usa la funzione Siti web di ServBay per configurare il web server e puntare al tuo progetto CodeIgniter.
- Apri l’interfaccia dell’applicazione ServBay.
- Vai nella sezione Siti web (Websites).
- Clicca sul pulsante
+
in basso a sinistra per aggiungere un nuovo sito. - Imposta le informazioni del sito:
- Nome: Inserisci un nome facile da identificare, ad esempio
My First CodeIgniter Dev Site
. - Dominio: Scegli un dominio da usare localmente, ad esempio
servbay-codeigniter-test.local
. ServBay gestisce automaticamente i domini.local
. - Tipo sito: Seleziona
PHP
. - Versione PHP: Scegli la versione che preferisci, ad esempio
8.3
. - Root documento (Document Root): Passo cruciale! Il file di ingresso di CodeIgniter (
index.php
) si trova nella cartellapublic
del progetto. Imposta quindi la root del sito sulla cartellapublic
del tuo progetto:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Nome: Inserisci un nome facile da identificare, ad esempio
- Clicca su Aggiungi (Add) per salvare la configurazione.
- ServBay potrebbe chiederti di applicare le modifiche: conferma.
Per ulteriori dettagli consulta la guida Aggiungere il primo sito web.
Aggiungere codice di esempio
Per verificare il funzionamento del progetto e testare la connessione a database e cache, modifichiamo il controller Home
di default di CodeIgniter, aggiungendo alcuni metodi di esempio.
Modifica app/Controllers/Home.php
e sostituisci il suo contenuto con il codice seguente:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Importa le eccezioni database
use CodeIgniter\Cache\Exceptions\CacheException; // Importa le eccezioni cache
class Home extends Controller
{
/**
* Metodo predefinito della homepage
*/
public function index(): string
{
// Restituisce un messaggio di benvenuto
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Esempio Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Prova a scrivere sulla cache
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // 60 secondi di cache
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Prova a leggere dalla 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) {
// Gestisce le eccezioni legate alla cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Gestisce altre possibili eccezioni
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Esempio Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Prova a scrivere sulla cache
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // 60 secondi di cache
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Prova a leggere dalla 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) {
// Gestisce le eccezioni legate alla cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Gestisce altre possibili eccezioni
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Scrive i dati utente nel database (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Verifica che la tabella 'users' esista
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Inserisce i dati
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Crea una email univoca usando time()
];
$db->table('users')->insert($data);
// Controlla l'inserimento (opzionale, insert() normalmente restituisce true)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Gestisce le eccezioni database
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Gestisce altre possibili eccezioni
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Legge i dati utente dal database (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Verifica che la tabella 'users' esista
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Ottiene tutti gli utenti
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Restituisce l’elenco degli utenti in formato JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Gestisce le eccezioni database
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Gestisce altre possibili eccezioni
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
Il controller aggiornato fornisce output chiari ed una gestione basilare degli errori per facilitare la diagnosi dei problemi.
Configurare le rotte
Per accedere tramite URL ai metodi di esempio aggiunti nel controller Home
, configura le rotte nel file app/Config/Routes.php
.
Modifica app/Config/Routes.php
. Trova la sezione di definizione delle $routes
e aggiungi:
php
// ... Altre regole di routing ...
// Rotta di esempio Memcached
$routes->get('/memcached', 'Home::memcached');
// Rotta di esempio Redis
$routes->get('/redis', 'Home::redis');
// Rotte di esempio database
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... Altre regole di routing ...
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
Assicurati di aggiungere queste rotte senza sovrascrivere la configurazione esistente.
Accedere al sito web
Il tuo progetto CodeIgniter è ora pronto e funzionante su ServBay. Apri il browser e accedi tramite il dominio configurato:
Homepage:
https://servbay-codeigniter-test.local
Dovresti vedere il messaggioHello ServBay and CodeIgniter!
, segno che il sito è operativo tramite il web server di ServBay.Test Memcached:
https://servbay-codeigniter-test.local/memcached
Se Memcached è configurato correttamente, vedrai un output simile aMemcached Test Success: Hello Memcached from CodeIgniter!
.Test Redis:
https://servbay-codeigniter-test.local/redis
Se Redis è configurato correttamente, comparirà un messaggio tipoRedis Test Success: Hello Redis from CodeIgniter!
.
Esempi di operazioni database (MySQL/PostgreSQL)
Per testare le funzioni di database, occorre prima creare la tabella users
tramite le migrazioni di CodeIgniter.
Creazione della struttura database (migrazione)
Apri il terminale e accedi alla directory del progetto CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Crea il file di migrazione: usa l’utility CLI di CodeIgniter per generare una migrazione dedicata alla tabella
users
:bashphp spark make:migration create_users_table
1Questo comando creerà un nuovo file PHP nella directory
app/Database/Migrations
.Modifica il file di migrazione: apri il file generato (il nome sarà simile a
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
), e aggiorna il metodoup()
per definire struttura e indici della tabella. Nota che la sintassi dei campi timestamp differisce tra MySQL e PostgreSQL (CURRENT_TIMESTAMP
vsNOW()
). CodeIgniter permette di gestirli tramiteRawSql
. Ecco un esempio:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Assicurati di importare 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 unica ], 'created_at' => [ 'type' => 'TIMESTAMP', // Imposta il valore di default dinamicamente a seconda del database // 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); // Imposta id come chiave primaria $this->forge->createTable('users'); // Crea la tabella users } public function down() { // Per ripristinare la migrazione, elimina la tabella 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
51Nota: L’esempio usa un semplice controllo per determinare la sintassi dei timestamp in base al database. In progetti reali potresti voler gestire migrazioni separate per ogni piattaforma.
Esegui la migrazione: Da terminale esegui:
bashphp spark migrate
1Se il comando va a buon fine, vedrai un messaggio di successo. Puoi verificare la creazione della tabella
users
nel databaseservbay_codeigniter_app
usando Adminer o altri strumenti di ServBay.
Esempi pratici d’uso database
Verifica di aver configurato correttamente la connessione in app/Config/Database.php
e di aver eseguito la migrazione per creare la tabella users
.
Aggiungi un utente: Visita
https://servbay-codeigniter-test.local/add-user
Ogni volta che accedi a questo URL, viene inserito un nuovo utente nella tabellausers
. Riceverai un messaggio tipoUser added successfully: user_XXXXXXXXXX@servbay.demo
.Elenca tutti gli utenti: Visita
https://servbay-codeigniter-test.local/list-users
Questo percorso recupera tutti i record dalla tabellausers
e li visualizza come array JSON.
Conclusione
Seguendo questi passaggi, hai creato, configurato e avviato correttamente un progetto CodeIgniter nell’ambiente ServBay su macOS o Windows. Hai imparato come creare il progetto con Composer, come impostare il sito tramite la funzione Siti web di ServBay, come configurare le connessioni a database e servizi di cache e come testare l’integrazione tramite codice di esempio. ServBay semplifica il setup e la gestione dell’ambiente locale, permettendoti di concentrarti sullo sviluppo dell’applicazione CodeIgniter.