Membina dan Menjalankan Projek CodeIgniter
Apa Itu CodeIgniter?
CodeIgniter ialah sebuah rangka kerja pembangunan aplikasi web PHP yang ringan dan berprestasi tinggi. Ia menggunakan corak reka bentuk Model-View-Controller (MVC), bertujuan membantu pembangun membina aplikasi web yang kaya dengan fungsi secara pantas. Dengan struktur yang ringkas, prestasi unggul dan mudah dipelajari, CodeIgniter menjadi pilihan utama ramai pembangun PHP.
Ciri Utama dan Kelebihan CodeIgniter
- Teras ringan: Sistem teras CodeIgniter sangat ringkas, hanya mengandungi komponen asas yang diperlukan untuk berfungsi, menjadikan ia sangat pantas dimuatkan.
- Prestasi cemerlang: Rangka kerja ini direka untuk kecekapan dan mampu menangani permintaan berprestasi tinggi.
- Mudah dipelajari: Dokumentasi yang jelas dan API yang intuitif memudahkan pembelajaran, membolehkan pembangun cepat mahir.
- Fleksibiliti tinggi: Pembangun bebas memilih dan mengintegrasi pustaka pihak ketiga mengikut keperluan projek, sesuai untuk pengembangan dan penyesuaian ciri.
- Komuniti sokongan aktif: Komuniti yang besar dan aktif menyediakan pelbagai sumber dan bantuan.
CodeIgniter sesuai untuk pelbagai keperluan pembangunan, daripada projek kecil hinggalah aplikasi perusahaan berskala besar, membantu anda membina solusi web berkualiti dengan cekap.
Menyediakan Persekitaran Pembangunan CodeIgniter dengan ServBay
ServBay ialah alat persekitaran pembangunan web lokal untuk macOS dan Windows, digabungkan dengan PHP, pangkalan data (MySQL, PostgreSQL, MongoDB), cache (Redis, Memcached) serta web server (Caddy, Nginx, Apache), dan menawarkan antara muka pengurusan yang mudah. Dengan ServBay, anda boleh menyediakan dan mengurus persekitaran pembangunan CodeIgniter dengan lancar.
Dalam panduan ini, anda akan belajar cara menggunakan persekitaran PHP ServBay dan ciri Websites untuk mencipta, mengkonfigurasi, dan menjalankan projek CodeIgniter, serta bagaimana mengintegrasikan pelbagai perkhidmatan pangkalan data dan cache.
Prasyarat
Sebelum bermula, pastikan anda telah:
- Memasang dan menjalankan ServBay dengan berjaya pada macOS atau Windows.
- Mengaktifkan versi PHP yang ingin digunakan dalam ServBay (contohnya PHP 8.3).
- Mengaktifkan pakej pangkalan data dan cache yang diperlukan dalam ServBay (MySQL, PostgreSQL, Redis, Memcached dan sebagainya).
Membina Projek CodeIgniter
ServBay mengesyorkan anda menyimpan semua projek laman web di direktori berikut untuk memudahkan pengurusan laman lokal:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Pasang Composer
ServBay telah menyertakan Composer ketika dipasang, jadi biasanya anda tidak perlu pemasangan manual tambahan. Anda boleh terus gunakan arahan
composer
dalam terminal.Masuk ke direktori root laman
Buka terminal dan masuk ke direktori root laman yang disyorkan ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Cipta Projek CodeIgniter
Gunakan Composer untuk mencipta projek CodeIgniter 4 baharu—namakan direktori projek anda sebagai
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer akan memuat turun aplikasi rangka CodeIgniter serta kebergantungannya ke dalam folder
servbay-codeigniter-app
.Masuk ke direktori projek
Masuk ke folder projek CodeIgniter yang baru:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Konfigurasi Awal
Konfigurasi Sambungan Pangkalan Data
Konfigurasi pangkalan data CodeIgniter terletak di dalam fail app/Config/Database.php
. Sebelum menggunakan pangkalan data, anda perlu menetapkan maklumat sambungan di sini.
Pertama, jika anda ingin menggunakan pangkalan data, pastikan anda telah mencipta pangkalan data bernama servbay_codeigniter_app
melalui alat pengurusan ServBay seperti Adminer atau phpMyAdmin (boleh diakses melalui antara muka ServBay).
Kemudian, edit fail app/Config/Database.php
, cari array $default
, dan isikan maklumat sambungan mengikut jenis pangkalan data yang anda aktifkan dalam ServBay (contohnya MySQL atau PostgreSQL). Secara lalai, nama pengguna dan katalaluan ServBay biasanya root
dan password
.
Contoh konfigurasi untuk MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // Pangkalan data ServBay biasanya beroperasi pada 127.0.0.1
'username' => 'root', // Nama pengguna default ServBay
'password' => 'password', // Katalaluan default ServBay
'database' => 'servbay_codeigniter_app', // Nama pangkalan data yang anda cipta
'DBDriver' => 'MySQLi', // Tetapkan mengikut jenis pangkalan data, 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 default 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 anda mungkin perlu melaraskan tetapan charset.
Konfigurasi Sambungan Cache (Memcached/Redis)
Untuk menggunakan Memcached atau Redis sebagai cache, tetapan perlu dibuat dalam fail app/Config/Cache.php
.
Edit fail app/Config/Cache.php
dan cari bahagian konfigurasi yang berkaitan. Port lalai untuk Memcached ServBay ialah 11211
dan Redis ialah 6379
, dan biasanya tiada katalaluan diperlukan.
Contoh konfigurasi untuk Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // Memcached ServBay biasanya pada 127.0.0.1
'port' => 11211, // Port default Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Contoh konfigurasi untuk Redis:
php
public string $handler = 'redis'; // Tetapkan pemproses cache kepada redis
public $default = [ // Konfigurasi Redis dalam array default
'host' => '127.0.0.1', // Redis ServBay biasanya pada 127.0.0.1
'password' => null, // Redis ServBay biasanya tiada katalaluan
'port' => 6379, // Port default Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Pastikan anda konfigurasi bahagian mengikut pakej cache yang anda aktifkan.
Konfigurasi Web Server (ServBay Websites)
Gunakan fungsi Websites pada ServBay untuk mengkonfigurasi web server dan arahkan ke projek CodeIgniter anda.
- Buka antara muka aplikasi ServBay.
- Pergi ke tab Websites.
- Klik butang
+
di sudut kiri bawah untuk tambahkan laman web baru. - Isikan maklumat laman:
- Nama (Name): Masukkan nama yang mudah dikenali seperti
My First CodeIgniter Dev Site
. - Domain (Domain): Masukkan domain untuk diakses di pelayar contohnya
servbay-codeigniter-test.local
. ServBay akan auto-resolve domain.local
secara lokal. - Site Type: Pilih
PHP
. - PHP Version: Pilih versi PHP yang dikehendaki contohnya
8.3
. - Document Root: Langkah ini penting. Fail kemasukan CodeIgniter (
index.php
) terletak dalam folderpublic
di direktori projek. Jadi, root dokumen mesti ditetapkan ke folderpublic
dalam direktori projek:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Nama (Name): Masukkan nama yang mudah dikenali seperti
- Klik Add untuk simpan tetapan.
- ServBay mungkin akan meminta anda untuk mengesahkan perubahan, klik untuk terima.
Untuk langkah lebih terperinci, rujuk Menambah Laman Web Pertama.
Menambah Kod Contoh
Untuk menguji projek anda dan sambungan ke pangkalan data serta cache, kemas kini pengawal lalai Home
CodeIgniter dengan beberapa kaedah contoh.
Edit fail app/Controllers/Home.php
dan gantikan kandungan dengan kod berikut:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Import kelas pengecualian database
use CodeIgniter\Cache\Exceptions\CacheException; // Import kelas pengecualian cache
class Home extends Controller
{
/**
* Kaedah untuk homepage lalai
*/
public function index(): string
{
// Kembali mesej selamat datang ringkas
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Projek CodeIgniter anda kini berjalan di ServBay.</p>';
}
/**
* Kaedah contoh Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Cuba simpan 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 yang berpotensi
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Kaedah contoh Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Cuba simpan 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 yang berpotensi
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Simpan data pengguna ke pangkalan data (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Semak sama ada jadual 'users' wujud (langkah pencegahan ringkas)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Simpan data
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Guna time() untuk cipta email unik
];
$db->table('users')->insert($data);
// Semak jika simpanan berjaya (insert() biasanya pulang true)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Tangkap pengecualian berkaitan database
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Tangkap pengecualian lain yang berpotensi
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Baca data pengguna daripada 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 user
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Pulangkan senarai user dalam format JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Tangkap pengecualian berkaitan database
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Tangkap pengecualian lain yang berpotensi
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 telah dikemas kini di atas memberikan output yang jelas serta pengendalian ralat asas untuk membantu diagnosis masalah.
Konfigurasi Route
Agar anda boleh akses kaedah contoh dalam pengawal Home
melalui URL, tambahkan peraturan route dalam fail route CodeIgniter.
Edit fail app/Config/Routes.php
. Cari bahagian takrifan $routes
, kemudian tambah peraturan route berikut:
php
// ... peraturan route lain ...
// Route untuk contoh Memcached
$routes->get('/memcached', 'Home::memcached');
// Route untuk contoh Redis
$routes->get('/redis', 'Home::redis');
// Route untuk contoh pangkalan data
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... peraturan route 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 route baru ini ke dalam definisi $routes
yang sedia ada tanpa menimpa kod lain.
Mengakses Laman Web
Kini projek CodeIgniter anda telah dikonfigurasi dan dijalankan di ServBay. Buka pelayar web anda dan akses menggunakan domain yang telah ditetapkan:
Laman utama:
https://servbay-codeigniter-test.local
Anda sepatutnya melihat mesejHello ServBay and CodeIgniter!
, menandakan projek berfungsi dengan web server ServBay.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!
.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 pangkalan data, jalankan perintah migrasi CodeIgniter untuk mencipta jadual users
.
Cipta Struktur Pangkalan Data (Migrasi)
Buka terminal dan masuk ke direktori projek CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Cipta fail migrasi: Guna CLI CodeIgniter untuk menghasilkan fail migrasi yang menentukan struktur jadual
users
:bashphp spark make:migration create_users_table
1Ini akan hasilkan fail PHP baharu dalam direktori
app/Database/Migrations
.Edit fail migrasi: Buka fail migrasi baru (namanya seperti
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
), dan edit kaedahup()
untuk menentukan kolum dan indeks jadualusers
. Perhatikan sintaks lalai timestamp berbeza antara MySQL dan PostgreSQL (CURRENT_TIMESTAMP
vsNOW()
). CodeIgniter'sRawSql
memudahkan urusan pemilihan berkenaan. Contoh:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Pastikan kelas RawSql diimport 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, // Set email sebagai unik ], 'created_at' => [ 'type' => 'TIMESTAMP', // Pilih ekspresi lalai mengikut jenis database // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Pemilihan dinamik ], '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()'), // Pemilihan dinamik ], ]); $this->forge->addKey('id', true); // Tetapkan id sebagai primary key $this->forge->createTable('users'); // Cipta jadual users } public function down() { // Arahan roll-back untuk hapus 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: Kod di atas menggunakan logik mudah untuk memilih sintaks timestamp lalai berdasarkan platform pangkalan data. Untuk projek sebenar, anda mungkin perlu strategi migrasi yang lebih robust atau migrasi fail berasingan untuk setiap database.
Jalankan migrasi: Dalam terminal, jalankan arahan berikut untuk cipta jadual
users
:bashphp spark migrate
1Jika berjaya, anda akan melihat mesej migrasi berjaya dalam terminal. Anda juga boleh semak jadual
users
dalam pangkalan dataservbay_codeigniter_app
menggunakan alat pengurusan database ServBay seperti Adminer.
Ujian Operasi Database
Pastikan anda telah mengkonfigurasi sambungan pangkalan data dengan betul dalam app/Config/Database.php
dan telah menjalankan migrasi untuk mencipta jadual users
.
Tambah pengguna ke pangkalan data: Lawati
https://servbay-codeigniter-test.local/add-user
Setiap lawatan ke URL ini akan memasukkan satu rekod pengguna baharu ke jadualusers
. Anda akan melihat output sepertiUser added successfully: user_XXXXXXXXXX@servbay.demo
.Senarai pengguna dalam pangkalan data: Lawati
https://servbay-codeigniter-test.local/list-users
URL ini akan mendapatkan semua rekod dari jadualusers
dan memaparkan dalam format JSON. Anda sepatutnya melihat array JSON yang mengandungi data pengguna.
Kesimpulan
Dengan mengikuti langkah-langkah ini, anda telah berjaya menyediakan, mengkonfigurasi dan menjalankan projek CodeIgniter di persekitaran ServBay pada macOS. Anda telah belajar cara menggunakan Composer untuk mencipta projek, mengkonfigurasi Websites dalam ServBay untuk mengarah ke direktori yang betul, menetapkan sambungan pangkalan data dan cache dalam CodeIgniter, serta menguji integrasi pangkalan data dan cache dengan kod contoh mudah. ServBay memudahkan proses penyediaan dan pengurusan persekitaran lokal, membolehkan anda fokus pada pembangunan aplikasi CodeIgniter anda.