Membina dan Menjalankan Projek Phalcon
Apa itu Phalcon?
Phalcon merupakan sebuah kerangka kerja PHP sumber terbuka berprestasi tinggi yang dibangunkan sebagai sambungan C. Kaedah ini membolehkan Phalcon menggunakan sumber secara minimum tetapi mempercepatkan proses pelaksanaan aplikasi web PHP secara ketara, menjadikannya jauh lebih efisien berbanding kerangka tradisional. Phalcon mematuhi seni bina MVC (Model-View-Controller) dan menyediakan pelbagai komponen, seperti ORM (Object-Relational Mapping), enjin templat, penghalaan, caching, pengurus acara, dan banyak lagi — semua direka untuk membantu anda membina aplikasi web dan API yang mantap dengan pantas.
Ciri-ciri Utama & Kelebihan Phalcon
- Prestasi unggul: Dengan dijalankan sebagai sambungan C, Phalcon mengurangkan beban pemuatan dan analisis skrip PHP, menawarkan prestasi natif.
- Cekap sumber: Penggunaan memori yang minimum, sesuai untuk aplikasi yang memerlukan prestasi dan skalabiliti tinggi.
- Fungsi menyeluruh: Hampir semua komponen teras pembangunan web sudah tersedia secara terbina, mengurangkan kebergantungan pada pustaka pihak ketiga.
- Mudah digunakan: API yang konsisten dan dokumentasi komprehensif membolehkan pembangun baru atau berpengalaman memahami dengan cepat.
- Sangat terpisah: Komponen direka secara modular, membolehkan pembangun memilih atau mengganti komponen mengikut keperluan projek.
- Selamat: Menyediakan pelbagai komponen berkaitan keselamatan, seperti penapisan input dan perlindungan CSRF.
Phalcon adalah pilihan terbaik untuk membina aplikasi web dan API yang pantas serta mudah dikembangkan, terutamanya di mana kecekapan sumber dan laju menjadi faktor utama.
Membina dan Menjalankan Projek Phalcon dengan ServBay
ServBay adalah persekitaran pembangunan web tempatan untuk macOS yang sudah menyatukan pelbagai versi PHP, pangkalan data (MySQL, PostgreSQL, MongoDB, Redis) dan pelayan web seperti Caddy, Nginx, serta Apache — berserta alat pembangun lain. Dengan ServBay, anda boleh membina dengan mudah persekitaran lengkap untuk projek Phalcon anda.
Panduan ini akan membantu anda menggunakan persekitaran PHP dalam ServBay untuk membina projek Phalcon asas, menetapkan pelayan web supaya boleh diakses, dan menunjukkan cara integrasi dengan pangkalan data (MySQL) serta NoSQL (Redis).
Keperluan Awal
Pastikan perkara berikut tersedia sebelum memulakan:
- ServBay telah dipasang dan berjalan: Pastikan ServBay sudah dipasang dan dihidupkan di sistem macOS anda.
- Versi PHP yang diperlukan telah diaktifkan: Pastikan versi PHP yang anda ingin gunakan telah diaktifkan dalam ServBay.
- Modul Phalcon telah diaktifkan: ServBay dilengkapi modul Phalcon, tetapi biasanya tidak diaktifkan secara lalai. Rujuk arahan di Cara Mengaktifkan Modul Phalcon ServBay untuk mengaktifkannya bagi versi PHP pilihan anda, kemudian mulakan semula servis PHP.
- Composer boleh digunakan: ServBay sudah mempunyai Composer bawaannya, jadi tiada pemasangan tambahan diperlukan. Pastikan anda boleh menjalankan arahan
composerdi terminal.
Versi Phalcon dan DevTools yang Bersesuaian
Versi kerangka Phalcon dan alat pembangun (Phalcon DevTools) perlu serasi dengan versi PHP yang digunakan. Jadual di bawah menunjukkan padanan versi PHP, Phalcon dan DevTools yang disyorkan:
| Versi PHP | Versi Phalcon Disyorkan | Phalcon DevTools Disyorkan | Nota |
|---|---|---|---|
| PHP 5.6, 7.0, 7.1 | Phalcon 3.4.5 | 3.4.x | |
| PHP 7.2, 7.3, 7.4 | Phalcon 4.1.2 | ~4.1 (atau 4.3.x) | |
| PHP 8.0, 8.1, 8.2 | Phalcon 5.x | 5.0.x (rasmi) | DevTools rasmi mungkin bermasalah pada PHP 8.x. |
| PHP 8.3, 8.4 | Phalcon 5.x | dev-master (versi baik pulih) | Disyorkan gunakan versi komuniti untuk keserasian yang lebih baik. |
Nota Penting: Untuk PHP 8.x dan ke atas, DevTools rasmi mungkin tidak serasi sepenuhnya. Guna versi baik pulih komuniti untuk pengalaman terbaik. Langkah pemasangan DevTools komuniti ditunjukkan dalam bahagian berikut.
Membina Projek Phalcon
Laluan simpan projek yang disyorkan
Untuk kemudahan pengurusan, ServBay mengesyorkan anda meletakkan projek web di direktori lalai /Applications/ServBay/www. Contoh dalam dokumen ini juga akan menggunakan laluan ini.
Masuk ke direktori web root dan cipta folder projek
Buka terminal, masuk ke direktori root laman ServBay dan cipta folder projek Phalcon (misal
servbay-phalcon-app):bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app1
2
3Pasang Phalcon DevTools
Phalcon DevTools ialah alat baris arahan untuk menjana kod, rangka projek, migrasi pangkalan data dan banyak lagi. Anda boleh pasang melalui Composer. Arahan berbeza mengikut versi PHP:
PHP 5.6, 7.0, 7.1 (Phalcon DevTools
^3.4):bashcomposer require phalcon/devtools:"^3.4"1PHP 7.2, 7.3, 7.4 (Phalcon DevTools
~4.1):bashcomposer require phalcon/devtools:"~4.1"1PHP 8.0, 8.1, 8.2, 8.3, 8.4 (Phalcon DevTools
dev-masterversi komuniti): Oleh sebab DevTools rasmi kurang serasi dengan PHP 8.x, gunakan versi komuniti. Tambahkan konfigurasi versi baik pulih ke failcomposer.jsondalam root projek/Applications/ServBay/www/servbay-phalcon-app:json{ "repositories": [ { "url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git", "type": "git" } ], "require": { "phalcon/devtools": "dev-master" }, "minimum-stability": "dev", "prefer-stable": true }1
2
3
4
5
6
7
8
9
10
11
12
13Kemudian jalankan:
bashcomposer update1
Composer akan mencipta direktori
vendordalam folder projek (servbay-phalcon-app) dan fail boleh laku DevTools divendor/bin/phalcon.Menjana rangka projek dengan DevTools
Gunakan DevTools untuk menghasilkan struktur asas projek Phalcon. Kod projek sebenar ditempatkan dalam subdirektori (contoh
servbay-phalcon-app, nama lalai DevTools):bashvendor/bin/phalcon project servbay-phalcon-app1Direktori baru
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-appdan rangka lengkap projek akan diwujudkan.Masuk ke direktori kod projek
Tukar ke direktori kod projek untuk langkah-langkah seterusnya:
bashcd servbay-phalcon-app1Kini anda berada di
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app.
Konfigurasi Persekitaran Projek
Konfigurasi projek Phalcon biasanya dilakukan dalam fail app/config/config.php, di mana anda tetapkan maklumat pangkalan data, laluan aplikasi dan tetapan penting lain.
Edit fail konfigurasi
Buka
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/config.phpmenggunakan editor kegemaran anda. Cari atau tambahkan bahagian konfigurasi pangkalan data. Pengguna lalai MySQL/MariaDB ServBay ialahrootdengan kata laluan kosong — tetapi demi keselamatan, sangat disarankan untuk tetapkan kata laluan yang kuat. Contoh di bawah menggunakanpasswordsebagai pengganti; pastikan anda menukar mengikut maklumat sebenar anda. Nama pangkalan data contohservbay_phalcon_app(anda perlu cipta pangkalan data ini secara manual):phpreturn new \Phalcon\Config([ // ... konfigurasi lain ... 'database' => [ 'adapter' => 'Mysql', // atau 'Postgres' dan lain-lain 'host' => '127.0.0.1', 'username' => 'root', // Pengguna lalai ServBay 'password' => 'password', // <-- Tukar kepada kata laluan anda 'dbname' => 'servbay_phalcon_app', // <-- Tukar kepada nama pangkalan data anda ], // ... konfigurasi lain ... ]);1
2
3
4
5
6
7
8
9
10
11Penting: Pastikan servis pangkalan data (MySQL/MariaDB) telah diaktifkan dalam ServBay dan butiran pengguna serta kata laluan adalah betul. Anda juga perlu cipta pangkalan data contoh (
servbay_phalcon_app). Gunakan phpMyAdmin atau Adminer dalam ServBay untuk pengurusan pangkalan data dan pengguna.
Tetapan Pelayan Web (menggunakan Fungsi Laman ServBay)
Agar laman Phalcon boleh dicapai melalui pelayar web, gunakan fungsi Laman ServBay untuk tetapkan hos maya dan laluan akar web.
- Buka ServBay
- Masuk ke tetapan Laman: Cari dan klik pada pilihan 'Laman' di antara muka utama ServBay.
- Tambah laman baru: Klik butang tambah laman.
- Nama: Nama mudah dikenali, contohnya
My First Phalcon Dev Site. - Domain: Masukkan domain yang akan digunakan di pelayar anda, contohnya
servbay-phalcon-test.local(ServBay akan auto-resolve domain.localsecara tempatan). - Jenis laman: Pilih
PHP. - Versi PHP: Pilih versi PHP yang telah diaktifkan bersama modul Phalcon.
- Laluan akar laman: Ini sangat penting. Fail masuk Phalcon (
index.php) biasanya di dalam direktoripublic. Jadi, tetapkan akar laman kepada:/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public.
- Nama: Nama mudah dikenali, contohnya
- Simpan: Simpan konfigurasi laman baharu. ServBay akan mengaplikasi perubahan secara automatik dan mungkin memerlukan restart pelayan web (Caddy/Nginx).
Untuk panduan terperinci, rujuk Menambah Laman Pertama. ServBay akan mengurus resolve domain tempatan dan konfigurasi pelayan web.
Tambah Kod Contoh
Mari tambah kod mudah untuk uji projek berjaya berjalan.
Konfigurasi routing
Edit
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/routes.phpdan tambah routing mudah untuk laluan utama/:php<?php use Phalcon\Mvc\Router; $router = new Router(false); // Definisi routing laluan utama '/' ke IndexController dan indexAction $router->add( '/', [ 'controller' => 'index', 'action' => 'index', ] ); // ... Tambah routing lain jika perlu ... $router->handle($_SERVER['REQUEST_URI']); return $router;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Bina controller
Edit
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/controllers/IndexController.php(cipta jika tiada), tambah methodindexAction:php<?php namespace App\Controllers; // Pastikan namespace betul use Phalcon\Mvc\Controller; class IndexController extends Controller { // Tangani permintaan laluan utama '/' public function indexAction() { // Pulangkan string mudah sebagai respons return 'Hello ServBay!'; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
Akses Laman Web
Setelah fail disimpan, pastikan ServBay sedang berjalan. Buka pelayar web dan akses domain yang telah dikonfigurasikan:
https://servbay-phalcon-test.local
Jika semuanya betul, anda akan nampak "Hello ServBay!" dipaparkan.
Integrasi Pangkalan Data
Phalcon menawarkan lapisan abstraksi pangkalan data dan ORM yang lengkap. ServBay menyatukan pelbagai jenis pangkalan data untuk integrasi mudah. Di bawah ialah contoh MySQL dan Redis.
Contoh Pangkalan Data Relasi: MySQL
Contoh di bawah menunjukkan cara gunakan adapter pangkalan data Phalcon untuk menyambung ke MySQL ServBay dan melakukan operasi ringkas insert dan query.
Cipta struktur pangkalan data (menggunakan migrasi)
DevTools menyokong migrasi pangkalan data untuk pengurusan versi schema.
Jana fail migrasi: Dalam folder projek kod, jalankan:
bashvendor/bin/phalcon migration generate1Ini akan cipta fail migrasi baru di folder
migrations, dengan nama sepertiYYYYMMDDHHMMSS_MigrationName.php.Edit fail migrasi: Buka fail migrasi dan tambah kod struktur jadual
users:php<?php use Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; /** * Class UsersMigration_100 */ class UsersMigration_100 extends Migration // Nama kelas mesti sama dengan fail migrasi { /** * Jalankan migrasi * * @return void */ public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], 'options' => [ 'TABLE_ENGINE' => 'InnoDB', 'CHARACTER SET' => 'utf8mb4', 'COLLATE' => 'utf8mb4_unicode_ci', ], ]); } /** * Undur migrasi * * @return void */ public function down() { // Pilihan: Logik rollback seperti padam jadual // $this->getConnection()->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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70Nota: Nama kelas (contoh
UsersMigration_100) mesti sama dengan nama fail migrasi.Laksana migrasi: Jalankan arahan berikut untuk cipta jadual di pangkalan data:
bashvendor/bin/phalcon migration run1Jika ada ralat, semak konfigurasi pangkalan data dalam
app/config/config.phpdan pastikan servis MySQL/MariaDB ServBay berjalan dengan baik.
Tetapan sambungan pangkalan data (dilakukan di atas)
Pastikan bahagian
'database'dalamapp/config/config.phpmengikut seting ServBay (host: 127.0.0.1, port: 3306, user: root, password: ikut tetapan anda).Tambah routing contoh
Edit
app/config/routes.phpdan tambah routing untuk insert & query pengguna:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); // Routing untuk tambah pengguna $router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); // Routing untuk query pengguna $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] ); $router->handle($_SERVER['REQUEST_URI']); return $router;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
31Implikasi operasi pangkalan data dalam controller
Edit
app/controllers/IndexController.phpuntuk tambahmysqlAddActiondanmysqlActionbagi operasi pangkalan data. Contoh di bawah:php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; // Import adapter MySQL use Phalcon\Db\Enum; // Untuk fetchAll class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } // Contoh tambah pengguna public function mysqlAddAction() { // Sambungan pangkalan data $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Tukar kata laluan anda 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Tambah rekod pengguna contoh $success = $connection->insert( 'users', // Nama jadual ['ServBay Demo User', 'demo@servbay.test'], // Nilai ['name', 'email'] // Lajur ); // Papar hasil echo $success ? 'User added successfully.' : 'Failed to add user.'; } // Contoh query pengguna public function mysqlAction() { // Sambungan pangkalan data $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Tukar kata laluan anda 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Query semua pengguna $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); // Output dalam format JSON header('Content-Type: application/json'); echo json_encode($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
51
52
53
54
55
56
57Nota: Penggunaan sambungan pangkalan data patut diuruskan sebagai servis dalam aplikasi sebenar menerusi dependency injection.
Ujian akses contoh
- Lawati
https://servbay-phalcon-test.local/mysql-adduntuk tambah pengguna. - Kemudian ke
https://servbay-phalcon-test.local/mysqluntuk melihat datausersdalam format JSON.
- Lawati
Contoh Pangkalan Data NoSQL: Redis
Contoh berikut menunjukkan cara menggunakan Redis dalam projek Phalcon sebagai cache.
Pastikan ekstensi Redis terpasang
ServBay biasanya sudah sedia dengan ekstensi Redis untuk PHP. Pastikan versi PHP yang digunakan telah mengaktifkan ekstensi Redis.
Tetapkan sambungan Redis
Tambahkan konfigurasi Redis ke dalam
app/config/config.php. ServBay menjalankan Redis di127.0.0.1:6379.phpreturn new \Phalcon\Config([ // ... konfigurasi lain ... 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, 'persistent' => false, 'auth' => null, // Isi jika Redis dipasang dengan password ], // ... konfigurasi lain ... ]);1
2
3
4
5
6
7
8
9
10
11
12Tambah routing contoh Redis
Edit fail
app/config/routes.phpdan tambah routing demo:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); $router->add('/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ]); $router->add('/mysql', [ 'controller' => 'index', 'action' => 'mysql', ]); // Routing untuk demo Redis $router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] ); $router->handle($_SERVER['REQUEST_URI']); return $router;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
32Implikasi Redis dalam controller
Edit
app/controllers/IndexController.phpdan tambah methodredisAction:php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; use Phalcon\Db\Enum; use Phalcon\Cache\Adapter\Redis; // Import adapter Redis use Phalcon\Storage\SerializerFactory; // Import Serializer class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } public function mysqlAddAction() { $connection = new Mysql([/* ... */]); $success = $connection->insert(/* ... */); echo $success ? 'User added successfully.' : 'Failed to add user.'; } public function mysqlAction() { $connection = new Mysql([/* ... */]); $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); header('Content-Type: application/json'); echo json_encode($users); } // Contoh penggunaan Redis public function redisAction() { // Cipta instance SerializerFactory $serializerFactory = new SerializerFactory(); // Pilihan konfigurasi Redis // Pastikan sama dengan bahagian 'cache' dalam config.php $options = [ 'defaultSerializer' => 'Json', 'lifetime' => 3600, 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // 'auth' => 'kata_laluan_redis_anda', // Jika Redis menggunakan password ]; // Cipta instance Redis adapter $cache = new Redis($serializerFactory, $options); $cacheKey = 'my_servbay_redis_cache_key'; $cachedData = $cache->get($cacheKey); // Cuba dapatkan data cache if ($cachedData === null) { // Tiada data dalam cache echo "Data not found in cache, fetching from source..."; $cachedData = 'Data fetched from source: Hello Redis from ServBay!'; $cache->set($cacheKey, $cachedData); // Simpan ke cache echo "Data stored in cache."; } else { // Data dijumpai dalam cache echo "Data found in cache: "; } // Paparkan data dari cache return $cachedData; } }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
69Nota: Untuk aplikasi sebenar, caching patut diuruskan sebagai servis bagi kebolehgunaan menyeluruh.
Uji akses contoh
Lawati
https://servbay-phalcon-test.local/redis.- Akses pertama: "Data not found in cache, fetching from source...Data stored in cache." bersama "Data fetched from source: Hello Redis from ServBay!".
- Akses seterusnya dalam tempoh cache akan paparkan "Data found in cache: " dan "Data fetched from source: Hello Redis from ServBay!" — bermakna data diambil dari Redis.
Soalan Lazim (FAQ)
- S: Laman menunjukkan 404 Not Found, apa yang patut dilakukan?
- J: Pastikan "Root laman" dalam ServBay menghala ke direktori
publicprojek Phalcon (/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public). Semak juga pelayan web (Caddy/Nginx) dalam ServBay sudah berjalan dan domain telah di-resolve dengan betul.
- J: Pastikan "Root laman" dalam ServBay menghala ke direktori
- S: Ralat seperti modul Phalcon tidak ditemui (Class 'Phalcon\Mvc\Application' not found dan seumpamanya)?
- J: Ini biasanya bermakna modul Phalcon belum diaktifkan pada versi PHP yang digunakan. Kembali ke antara muka ServBay dan pastikan versi PHP projek sudah aktif Phalcon; kemudian restart servis PHP. Rujuk Cara Aktifkan Modul Phalcon ServBay.
- S: Gagal menyambung dengan pangkalan data?
- J: Semak tetapan sambungan pangkalan data dalam
app/config/config.php(host, username, password, nama pangkalan data). Pastikan servis pangkalan data (MySQL/MariaDB) dalam ServBay sedang berjalan. Confirm pengguna mempunyai akses dan pangkalan data telah dicipta.
- J: Semak tetapan sambungan pangkalan data dalam
Rumusan
Menerusi ServBay, anda boleh membina persekitaran pembangunan tempatan yang sangat pantas untuk framework Phalcon dengan mudah. Panduan ini menunjukkan dari pembinaan rangka projek, seting pelayan web hingga integrasi dengan pangkalan data MySQL dan Redis. Pakej-pakej dan antara muka pengurusan yang disertakan sangat memudahkan konfigurasi — membolehkan anda tumpu sepenuhnya kepada pembangunan aplikasi Phalcon. Semoga panduan ini membantu anda memulakan pembangunan web yang cekap dengan ServBay dan Phalcon!
