Membina dan Menjalankan Projek CodeIgniter
Apa Itu CodeIgniter?
CodeIgniter ialah sebuah rangka kerja pembangunan aplikasi web PHP yang ringan dan berprestasi tinggi. Ia mengikuti corak reka bentuk Model-View-Controller (MVC) dan direka untuk membantu pembangun membina aplikasi web yang kaya dengan ciri dengan pantas. Dengan struktur yang ringkas, prestasi hebat dan kemudahan pembelajaran, CodeIgniter menjadi pilihan utama ramai pembangun PHP.
Ciri Utama & Kelebihan CodeIgniter
- Inti yang Ringan: Sistem teras CodeIgniter sangat minimalis, hanya mengandungi komponen asas untuk beroperasi, memberikan kelajuan muatan yang sangat pantas.
- Prestasi Cemerlang: Rangka kerja ini direka dengan penekanan pada kecekapan dan mampu mengendalikan permintaan serentak yang tinggi untuk prestasi aplikasi yang optimum.
- Mudah Dipelajari: Mendapat sokongan dokumentasi jelas dan API yang intuitif supaya pembangun boleh menguasainya dengan cepat.
- Fleksibiliti Tinggi: Membolehkan pembangun memilih dan mengintegrasi pustaka pihak ketiga mengikut keperluan projek dengan mudah untuk peluasan dan penyesuaian ciri.
- Sokongan Komuniti Aktif: Komuniti pembangun yang besar dan aktif, menyediakan banyak sumber dan bantuan.
CodeIgniter sesuai untuk kegunaan dari projek kecil hingga aplikasi perusahaan bersaiz besar, membantu anda membina penyelesaian web berkualiti dengan cekap.
Membina Persekitaran Pembangunan CodeIgniter dengan ServBay
ServBay ialah alat persekitaran pembangunan web tempatan untuk macOS yang mengintegrasikan PHP, pangkalan data (MySQL, PostgreSQL, MongoDB), cache (Redis, Memcached), pelayan web (Caddy, Nginx, Apache) dan pelbagai komponen lain, bersama antara muka pengurusan yang mudah digunakan. Dengan ServBay, anda boleh membina dan mengurus persekitaran pembangunan untuk CodeIgniter dengan mudah.
Panduan ini akan menunjukkan cara menggunakan persekitaran PHP dan fungsi Websites di ServBay untuk mencipta, mengkonfigurasi dan menjalankan projek CodeIgniter, serta cara menggabungkan pelbagai pangkalan data dan perkhidmatan cache.
Prasyarat
Sebelum bermula, pastikan anda telah memenuhi perkara berikut:
- Sudah memasang dan menjalankan ServBay di macOS anda.
- Versi PHP yang anda ingin gunakan (cth. PHP 8.3) telah diaktifkan dalam ServBay.
- Pakej pangkalan data dan cache yang diperlukan (cth. MySQL, PostgreSQL, Redis, Memcached) telah diaktifkan dalam ServBay.
Mencipta Projek CodeIgniter
ServBay mengesyorkan agar semua projek website anda disimpan di direktori /Applications/ServBay/www
untuk pengurusan laman web yang lebih baik.
Pasang Composer
ServBay telah menyediakan Composer semasa pemasangan, jadi anda biasanya tidak perlu memasangnya secara manual. Anda boleh terus gunakan perintah
composer
di Terminal.Masuk ke Direktori Root Website
Buka Terminal dan navigasi ke direktori root website yang dicadangkan oleh ServBay:
bashcd /Applications/ServBay/www
1Cipta Projek CodeIgniter
Gunakan Composer untuk mencipta projek CodeIgniter 4 yang baharu. Sebagai contoh, namakan direktori projek anda
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer akan memuat turun aplikasi rangka CodeIgniter serta kebergantungan ke dalam direktori
servbay-codeigniter-app
.Masuk ke Direktori Projek
Navigasi ke direktori projek CodeIgniter yang baharu dicipta:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
Konfigurasi Awal
Konfigurasi Sambungan Pangkalan Data
Konfigurasi pangkalan data untuk CodeIgniter terletak di fail app/Config/Database.php
. Sebelum menggunakan pangkalan data, anda perlu menyelesaikan maklumat sambungan dalam fail ini.
Mula-mula, jika anda berhasrat untuk menggunakan pangkalan data, pastikan anda telah mencipta pangkalan data bernama servbay_codeigniter_app
melalui alat pengurusan pangkalan data ServBay (seperti Adminer atau phpMyAdmin yang boleh diakses dari antara muka aplikasi ServBay).
Selepas itu, edit fail app/Config/Database.php
, cari tatasusunan $default
, dan isikan maklumat sambungan mengikut jenis pangkalan data yang telah diaktifkan di ServBay (cth. MySQL atau PostgreSQL). Nama pengguna dan kata laluan lalai ServBay biasanya root
dan password
.
Contoh konfigurasi untuk MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay DB selalunya didengar pada 127.0.0.1
'username' => 'root', // Nama pengguna lalai ServBay
'password' => 'password', // Kata laluan lalai ServBay
'database' => 'servbay_codeigniter_app', // Nama DB yang anda cipta
'DBDriver' => 'MySQLi', // Pilih mengikut jenis DB; MySQL guna MySQLi atau Pdo
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Port lalai 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
Jika menggunakan PostgreSQL, setkan DBDriver
kepada 'Postgre'
, port
biasanya 5432
, dan sesuaikan tetapan berkaitan 'charset' jika perlu.
Konfigurasi Sambungan Cache (Memcached/Redis)
Jika anda ingin menggunakan Memcached atau Redis, lakukan konfigurasi pada fail app/Config/Cache.php
.
Edit fail app/Config/Cache.php
dan cari bahagian konfigurasi berkaitan. Port lalai untuk Memcached ialah 11211
, manakala Redis ialah 6379
, biasanya tanpa kata laluan.
Contoh konfigurasi Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcached biasanya didengar pada 127.0.0.1
'port' => 11211, // Port lalai Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Contoh konfigurasi Redis:
php
public string $handler = 'redis'; // Tetapkan pengendali cache lalai ke redis
public $default = [ // Konfigurasi Redis biasanya dalam tatasusunan default
'host' => '127.0.0.1', // ServBay Redis biasanya didengar pada 127.0.0.1
'password' => null, // Redis ServBay biasanya tanpa kata laluan
'port' => 6379, // Port lalai Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Pastikan anda mengkonfigurasi bahagian yang berkaitan mengikut pakej cache yang telah diaktifkan.
Konfigurasi Pelayan Web (Tetapan Website ServBay)
Gunakan fungsi Websites pada ServBay untuk mengkonfigurasi pelayan web supaya menunjuk ke projek CodeIgniter anda.
- Buka antara muka aplikasi ServBay.
- Pergi ke tab Websites.
- Klik butang
+
di bahagian bawah kiri untuk menambah website baharu. - Isikan maklumat website:
- Nama (Name): Masukkan nama yang mudah dikenal pasti, contohnya
My First CodeIgniter Dev Site
. - Domain: Masukkan domain yang ingin digunakan, contohnya
servbay-codeigniter-test.local
. ServBay secara automatik memetakan domain.local
ke peranti tempatan anda. - Jenis Laman (Site Type): Pilih
PHP
. - Versi PHP (PHP Version): Pilih versi PHP yang ingin digunakan, contohnya
8.3
. - Root Dokumen (Document Root): Penting! Fail utama CodeIgniter ialah
index.php
di dalam folderpublic
projek anda. Root dokumen web anda mesti ditetapkan ke folderpublic
dalam direktori projek:/Applications/ServBay/www/servbay-codeigniter-app/public
- Nama (Name): Masukkan nama yang mudah dikenal pasti, contohnya
- Klik Add untuk menyimpan tetapan.
- Mungkin anda akan diminta untuk mengesahkan perubahan, klik ya untuk meneruskan.
Untuk langkah terperinci, rujuk kepada Menambah Laman Web Pertama Anda.
Menambah Kod Contoh
Untuk mengesahkan bahawa projek berjalan dengan baik dan menguji sambungan ke pangkalan data dan cache, edit pengawal Home
dalam CodeIgniter dengan menambah beberapa kaedah contoh.
Edit fail app/Controllers/Home.php
dan gantikan kandungannya dengan kod berikut:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Import kelas pengecualian DB
use CodeIgniter\Cache\Exceptions\CacheException; // Import kelas pengecualian cache
class Home extends Controller
{
/**
* Kaedah utama untuk laman utama
*/
public function index(): string
{
// Pulangkan mesej alu-aluan ringkas
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Kaedah contoh Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Cuba tulis ke cache
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // Cache selama 60 saat
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Cuba baca dari 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) {
// Tangkap pengecualian berkaitan cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Tangkap pengecualian lain
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Kaedah contoh Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Cuba tulis ke cache
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // Cache selama 60 saat
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Cuba baca dari 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) {
// Tangkap pengecualian berkaitan cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Tangkap pengecualian lain
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Menulis data pengguna ke pangkalan data (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Semak sama ada jadual 'users' wujud (langkah pencegahan mudah)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Masukkan data
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Guna time() untuk email unik
];
$db->table('users')->insert($data);
// Semak kejayaan insert (insert() biasanya pulangkan true)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Tangkap pengecualian berkaitan DB
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Tangkap pengecualian lain
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Membaca data pengguna dari pangkalan data (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Semak sama ada jadual 'users' wujud
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Dapatkan semua pengguna
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Pulangkan senarai pengguna dalam bentuk JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Tangkap pengecualian berkaitan DB
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Tangkap pengecualian lain
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
Pengawal yang dikemas kini ini ada output lebih jelas dan pengendalian ralat asas untuk membantu diagnosis.
Konfigurasi Routing
Supaya anda boleh mengakses kaedah contoh dalam pengawal Home
melalui URL, tambah peraturan laluan berikut ke fail routing CodeIgniter.
Edit fail app/Config/Routes.php
. Cari bahagian definisi $routes
dan tambah peraturan berikut:
php
// ... Peraturan laluan lain ...
// Laluan contoh Memcached
$routes->get('/memcached', 'Home::memcached');
// Laluan contoh Redis
$routes->get('/redis', 'Home::redis');
// Laluan contoh pangkalan data
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... Peraturan laluan lain ...
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
Pastikan anda menambah laluan ini ke dalam definisi $routes
tanpa menimpa kandungan asal.
Akses Website
Sekarang projek CodeIgniter anda sedia dan berjalan di atas ServBay. Buka pelayar web anda dan akses melalui domain yang anda tetapkan:
Akses laman utama:
https://servbay-codeigniter-test.local
Anda sepatutnya melihat output bertulisHello ServBay and CodeIgniter!
— tanda bahawa projek anda dijalankan dengan baik melalui pelayan web ServBay.Akses contoh Memcached:
https://servbay-codeigniter-test.local/memcached
Jika servis Memcached dan konfigurasi betul, anda akan nampak output sepertiMemcached Test Success: Hello Memcached from CodeIgniter!
.Akses contoh Redis:
https://servbay-codeigniter-test.local/redis
Jika servis Redis dan konfigurasi betul, anda akan nampak output sepertiRedis Test Success: Hello Redis from CodeIgniter!
.
Contoh Operasi Pangkalan Data (MySQL/PostgreSQL)
Sebelum menggunakan contoh berkaitan pangkalan data, anda perlu lalukan perintah migrasi CodeIgniter untuk mencipta jadual users
.
Membina Struktur Pangkalan Data (Menjalankan Migrasi)
Buka Terminal dan masuk ke direktori projek CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Cipta Fail Migrasi: Gunakan CLI CodeIgniter untuk menjana fail migrasi struktur jadual
users
:bashphp spark make:migration create_users_table
1Fail PHP baru akan wujud dalam
app/Database/Migrations
.Edit Fail Migrasi: Buka fail migrasi baharu itu (contohnya
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) dan edit kaedahup()
untuk menentukan lajur dan indeks jadualusers
. Perhatikan perbezaan sintaks medan timestamp default antara MySQL (CURRENT_TIMESTAMP
) dan PostgreSQL (NOW()
). Anda boleh gunaRawSql
CodeIgniter seperti contoh di bawah:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Pastikan import kelas 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, // Medan email adalah unik ], 'created_at' => [ 'type' => 'TIMESTAMP', // Pilih default mengikut platform DB // 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); // Tetapkan id sebagai primary key $this->forge->createTable('users'); // Cipta jadual users } public function down() { // Untuk revert migration, buang jadual 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: Contoh di atas menggunakan logik mudah untuk memilih sintaks timestamp default mengikut platform DB. Dalam projek sebenar, mungkin anda mahu strategi migrasi yang lebih mantap atau fail migrasi berasingan untuk setiap DB.
Jalankan Migrasi: Gunakan perintah berikut untuk menjalankan migrasi dan mencipta jadual
users
:bashphp spark migrate
1Jika berjaya, anda akan nampak mesej migrasi berjaya dalam Terminal. Anda juga boleh periksa dengan Adminer atau alat DB ServBay sama ada jadual
users
telah tercipta.
Akses Contoh Pangkalan Data
Pastikan anda telah mengkonfigurasi maklumat sambungan pangkalan data dalam app/Config/Database.php
dan sudah menjalankan migrasi.
Tambah pengguna ke DB: Lawati
https://servbay-codeigniter-test.local/add-user
Setiap kali akses URL ini, rekod pengguna baharu akan ditambah ke dalam jadualusers
. Anda akan nampak mesej sepertiUser added successfully: [email protected]
.Senarai pengguna dalam DB: Lawati
https://servbay-codeigniter-test.local/list-users
URL ini akan mengambil semua rekod daripada jadualusers
dan memaparkan dalam format JSON. Anda sepatutnya melihat tatasusunan pengguna dalam JSON.
Rumusan
Dengan langkah di atas, anda telah berjaya membina, mengkonfigurasi dan menjalankan projek CodeIgniter di persekitaran ServBay pada macOS. Anda telah belajar cara menggunakan Composer untuk mencipta projek, mengkonfigurasi fungsi Websites ServBay dengan betul untuk projek anda, mengkonfigurasi sambungan pangkalan data dan cache untuk CodeIgniter, serta mengesahkan integrasi dengan contoh kod mudah. ServBay memudahkan proses membina dan mengurus persekitaran pembangunan tempatan supaya anda boleh fokus pada pembangunan aplikasi CodeIgniter anda.