Mencipta dan Menjalankan Projek Phalcon
Apa Itu Phalcon?
Phalcon ialah kerangka kerja web PHP sumber terbuka yang berprestasi tinggi, dibangunkan sebagai ekstensi C. Pendekatan unik ini membolehkan Phalcon menggunakan sumber yang sangat minimum dan menawarkan kelajuan eksekusi yang sangat pantas, mengatasi kebanyakan kerangka PHP tradisional. Phalcon mengamalkan pola seni bina MVC (Model-View-Controller) serta menyediakan pelbagai komponen kaya seperti ORM (Object Relational Mapping), enjin templat, routing, caching, pengurusan acara dan banyak lagi bagi membolehkan pembangun membina aplikasi web dan API berkuasa dengan cepat dan cekap.
Ciri-Ciri Utama & Kelebihan Phalcon
- Prestasi Hebat: Beroperasi sebagai ekstensi C, Phalcon mengelakkan kos parsing dan pemuatan skrip PHP dan menawarkan prestasi setaraf native.
- Cekap Sumber: Penggunaan memori yang sangat rendah, sesuai untuk aplikasi yang memerlukan prestasi tinggi dan boleh diskala.
- Ciri-ciri Lengkap: Merangkumi kebanyakan komponen teras untuk pembangunan aplikasi web, mengurangkan kebergantungan kepada pustaka pihak ketiga.
- Mudah Digunakan: Menyediakan API yang jelas, konsisten serta dokumentasi yang terperinci, membolehkan pembangun baru untuk memahami dengan mudah.
- Sangat Modular: Setiap komponen direka bentuk secara berdikari; anda bebas memilih atau menggantikan komponen mengikut keperluan projek.
- Selamat: Menyediakan pelbagai komponen berkaitan keselamatan seperti penapisan input, perlindungan CSRF dan lain-lain.
Phalcon ialah pilihan ideal untuk membangunkan aplikasi web dan API yang berprestasi tinggi serta boleh diskala, terutamanya bagi projek yang mementingkan kepantasan dan kecekapan penggunaan sumber.
Mencipta & Menjalankan Projek Phalcon Menggunakan ServBay
ServBay ialah persekitaran pembangunan web tempatan untuk macOS yang dioptimumkan, menggabungkan pelbagai versi PHP, pangkalan data (seperti MySQL, PostgreSQL, MongoDB, Redis) dan pelayan web (Caddy, Nginx, Apache), bersama alat pembangun lain. Dengan ServBay, anda boleh menyediakan dan mengurus persekitaran yang diperlukan untuk projek Phalcon dengan mudah.
Panduan ini akan membimbing anda mencipta projek Phalcon asas menggunakan persekitaran PHP ServBay, konfigurasikan pelayan web agar boleh diakses, serta demonstrasi bagaimana untuk integrasi pangkalan data berhubung (MySQL) dan pangkalan data NoSQL (Redis).
Prasyarat
Sebelum bermula, pastikan anda memenuhi syarat berikut:
- ServBay Telah Dipasang dan Dijalankan: Pastikan ServBay telah berjaya dipasang dan dijalankan di macOS anda.
- Versi PHP Yang Diperlukan Telah Diaktifkan: Dalam ServBay, pastikan versi PHP yang anda akan gunakan telah diaktifkan.
- Modul Phalcon Telah Diaktifkan: ServBay menyertakan modul Phalcon secara lalai, tetapi ia mungkin tidak diaktifkan secara automatik. Sila aktifkan ekstensi Phalcon untuk versi PHP berkaitan mengikut dokumentasi Cara Mengaktifkan Modul Phalcon ServBay dan mulakan semula servis PHP.
- Composer Telah Sedia Digunakan: ServBay menyediakan Composer secara terbina dalam, jadi anda tidak perlu memasang secara berasingan. Pastikan anda boleh menggunakan arahan
composer
dalam terminal.
Pelbagai Versi Phalcon dan DevTools
Versi kerangka kerja Phalcon dan alat pembangun (Phalcon DevTools) mesti serasi dengan versi PHP yang anda gunakan. Jadual berikut memaparkan hubungan padanan antara versi PHP yang biasa digunakan dengan versi Phalcon dan DevTools yang disarankan:
Versi PHP | Versi Phalcon Disyorkan | Versi Phalcon DevTools Disyorkan | Catatan |
---|---|---|---|
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 mempunyai isu keserasian di PHP 8.x. |
PHP 8.3, 8.4 | Phalcon 5.x | dev-master (repositori fix) | Disyorkan guna versi komuniti-fix untuk keserasian yang lebih baik. |
PERHATIAN: Untuk PHP 8.x ke atas, DevTools rasmi mungkin tidak serasi sepenuhnya. Sangat digalakkan guna versi fix yang disediakan komuniti. Langkah menggunakan versi fix melalui Composer akan diterangkan lanjut.
Membina Projek Phalcon
Cadangan Lokasi Simpanan Laman Web
Bagi memudahkan pengurusan, ServBay mencadangkan semua projek laman web diletakkan di direktori root lalai /Applications/ServBay/www
. Demonstrasi ini juga akan menggunakan direktori tersebut.
Masuk ke Direktori Root Laman & Cipta Folder Projek
Buka terminal, navigasi ke root laman ServBay dan cipta folder baru (cth.
servbay-phalcon-app
):bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Pasang Phalcon DevTools
Phalcon DevTools adalah set alat baris arahan bagi membantu pembangun menjana kod, struktur projek, migrasi pangkalan data dan sebagainya. Pasangkan mengikut versi PHP yang anda pilih:
Untuk PHP 5.6, 7.0, 7.1 (Phalcon DevTools
^3.4
):bashcomposer require phalcon/devtools:"^3.4"
1Untuk PHP 7.2, 7.3, 7.4 (Phalcon DevTools
~4.1
):bashcomposer require phalcon/devtools:"~4.1"
1Untuk PHP 8.0, 8.1, 8.2, 8.3, 8.4 (DevTools
dev-master
versi fix): Disebabkan isu keserasian DevTools rasmi dengan PHP 8.x, anda perlu gunakan versi komuniti. Tambah konfigurasi repositori berikut kecomposer.json
dalam direktori projek: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 update
1
Composer akan mencipta direktori
vendor
di root projek, dan fail boleh laksana DevTools akan berada divendor/bin/phalcon
.Guna Phalcon DevTools untuk Hasilkan Rangka Projek
Jalankan perintah berikut untuk membina rangka asas projek (struktur sebenar kod diletakkan dalam subdirektori):
bashvendor/bin/phalcon project servbay-phalcon-app
1Ini akan mewujudkan direktori baru
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
dengan struktur penuh projek Phalcon.Navigasi ke Direktori Kod Projek
Selepas rangka projek dijana, masuk ke direktori kod projek:
bashcd servbay-phalcon-app
1Anda kini berada di
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
.
Konfigurasi Persekitaran Projek
Konfigurasi utama Phalcon biasanya dibuat dalam fail app/config/config.php
. Pastikan bahagian sambungan pangkalan data dan tetapan utama telah diisi.
Edit Fail Konfigurasi
Gunakan editor kod untuk buka fail
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/config.php
. Cari atau tambahkan bahagian konfigurasi pangkalan data. Pengguna lalai MySQL/MariaDB ServBay ialahroot
dengan kata laluan kosong, namun anda sangat digalakkan menetapkan kata laluan kukuh pada pengeluaran. Gantikanpassword
dan nama pangkalan data dengan maklumat sebenar anda.phpreturn new \Phalcon\Config([ // ... konfigurasi lain ... 'database' => [ 'adapter' => 'Mysql', // Atau 'Postgres' dsb 'host' => '127.0.0.1', 'username' => 'root', // Pengguna root ServBay 'password' => 'password', // <-- Gantikan dengan kata laluan anda 'dbname' => 'servbay_phalcon_app', // <-- Namakan pangkalan data anda ], // ... konfigurasi lain ... ]);
1
2
3
4
5
6
7
8
9
10
11Penting: Pastikan servis pangkalan data (cth. MySQL/MariaDB) telah dimulakan di ServBay dan maklumat pengguna serta kata laluan sepadan dengan konfigurasi ini. Pangakalan data
servbay_phalcon_app
juga perlu dicipta secara manual, gunakan phpMyAdmin atau Adminer jika perlu.
Konfigurasi Pelayan Web (Melalui Fungsi “Laman Web” ServBay)
Untuk mengakses projek Phalcon di pelayar, gunakan fungsi Laman Web di ServBay untuk menambah virtual host yang menunjuk ke direktori awam projek.
- Buka Aplikasi ServBay
- Pergi ke Tetapan 'Laman Web': Dalam antaramuka utama ServBay, klik tab 'Laman Web'.
- Tambah Laman Baru:
- Nama: Cth.
My First Phalcon Dev Site
- Domain: Cth.
servbay-phalcon-test.local
. (ServBay akan menguruskan resolusi .local ke peranti anda.) - Jenis Laman: Pilih
PHP
- Versi PHP: Pilih versi yang dipasang dan diaktifkan modul Phalcon.
- Root Laman Web: Wajib, tunjuk ke
public
—/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
.
- Nama: Cth.
- Simpan: Selesaikan konfigurasi dan simpan. ServBay akan memproses perubahan, termasuk restart pelayan web jika perlu.
Rujuk Tambah Laman Web Pertama untuk langkah lebih terperinci. Selepas konfigurasi, domain .local serta tetapan pelayan web akan diuruskan oleh ServBay secara automatik.
Menambah Kod Contoh
Mari kita tambah kod ringkas untuk menyemak operasi projek ini.
Konfigurasi Routing
Edit fail
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/routes.php
, tambah routing mudah untuk root/
:php<?php use Phalcon\Mvc\Router; $router = new Router(false); // Tetapkan laluan lalai, padankan '/' ke IndexController:indexAction $router->add( '/', [ 'controller' => 'index', 'action' => 'index', ] ); // ... boleh tambah routing lain di sini ... $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
19Cipta Controller
Edit (atau cipta baru jika perlu) fail
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/controllers/IndexController.php
, tambah methodindexAction
:php<?php namespace App\Controllers; // Pastikan namespace betul use Phalcon\Mvc\Controller; class IndexController extends Controller { // Kendali permintaan ke '/' public function indexAction() { // Hantar respon ringkas return 'Hello ServBay!'; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Akses Laman Web
Selepas semua fail disimpan, pastikan ServBay berjalan. Buka pelayar web anda dan lawati domain yang telah dikonfigurasi di ServBay:
https://servbay-phalcon-test.local
Jika konfigurasi betul, anda akan dapat melihat output Hello ServBay!
di pelayar.
Integrasi Pangkalan Data
Phalcon menawarkan lapisan abstraksi pangkalan data dan ORM yang kukuh. Dengan integrasi pangkalan data pelbagai servis dalam ServBay, gabungkannya dengan projek Phalcon jadi sangat mudah. Contoh di bawah menggunakan MySQL dan Redis.
Contoh Pangkalan Data Relasi: MySQL
Demonstrasi menghubungkan, memasukkan dan mengambil data menggunakan adapter MySQL Phalcon dengan servis MySQL ServBay.
Cipta Struktur Pangkalan Data (Migrasi)
Phalcon DevTools menyokong migrasi untuk pengurusan versi strukutur pangkalan data.
Hasilkan Fail Migrasi: Dalam direktori kod projek:
bashvendor/bin/phalcon migration generate
1Ini akan cipta fail migrasi baru di
migrations
dengan nama sepertiYYYYMMDDHHMMSS_MigrationName.php
.Edit Fail Migrasi: Ubahsuai method
morph
untuk tentukan struktur jadualusers
: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 selaras dengan fail { /** * 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, cth. hapus 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: Kelas dalam fail (cth.
UsersMigration_100
) mesti padan dengan nama fail migrasi.Laksanakan Migrasi: Laksana perintah berikut untuk cipta jadual
users
dalam pangkalan data:bashvendor/bin/phalcon migration run
1Jika menghadapi isu sambungan, semak konfigurasi pada
app/config/config.php
serta servis MySQL/MariaDB telah dijalankan di ServBay.
Konfigurasi Sambungan Pangkalan Data (Sudah Selesai di Bahagian Awal)
Pastikan konfigurasi
'database'
dalamapp/config/config.php
betul (lalai: host127.0.0.1
, port 3306, penggunaroot
, kata laluan mengikut tetapan anda).Tambah Routing Contoh
Edit
app/config/routes.php
, tambah routing untuk operasi data pengguna:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); // Tambah routing untuk memasukkan data pengguna $router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); // Tambah routing untuk memaparkan data 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
31Laksanakan Operasi Pangkalan Data dalam Controller
Edit
app/controllers/IndexController.php
. Tambah methodmysqlAddAction
danmysqlAction
:php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; // Import adapter MySQL use Phalcon\Db\Enum; // Untuk konstanta fetchAll class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } // Contoh masukkan data pengguna public function mysqlAddAction() { // Dapatkan sambungan DB dari container atau (seperti di sini) cipta langsung $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Gantikan dengan kata laluan sebenar anda 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Masukkan rekod pengguna contoh $success = $connection->insert( 'users', // nama jadual ['ServBay Demo User', '[email protected]'], // nilai ['name', 'email'] // kolum ); // Paparkan hasil echo $success ? 'User added successfully.' : 'Failed to add user.'; } // Contoh paparan data pengguna public function mysqlAction() { // Sambungan DB $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Gantikan dengan kata laluan sebenar anda 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Ambil 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: Dalam aplikasi sebenar, digalakkan mendaftarkan sambungan DB sebagai servis dalam DI container, bukan cipta baru di setiap action.
Akses Contoh
- Layari
https://servbay-phalcon-test.local/mysql-add
untuk menambah pengguna. Jika berjaya, anda akan nampak mesej "User added successfully." - Lawati
https://servbay-phalcon-test.local/mysql
untuk melihat data dalam format JSON.
- Layari
Contoh Pangkalan Data NoSQL: Redis
Demonstrasi menggunakan Redis servis dalam Phalcon melalui ServBay, khususnya sebagai cache.
Pastikan Ekstensi Redis Dipasang
Selalunya, paket PHP dalam ServBay sudah terbina dengan ekstensi Redis. Pastikan hanya diaktifkan untuk versi PHP yang digunakan (lazimnya, tidak perlu pemasangan manual).
Konfigurasi Sambungan Redis
Tambahkan konfigurasi pada
app/config/config.php
. Servis Redis ServBay lalai beroperasi di127.0.0.1:6379
.phpreturn new \Phalcon\Config([ // ... konfigurasi lain ... 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // Index DB Redis, default 0 'persistent' => false, // Guna sambungan persistent? 'auth' => null, // Masukkan kata laluan jika Redis dipasang dengan password ], // ... konfigurasi lain ... ]);
1
2
3
4
5
6
7
8
9
10
11
12Tambah Routing Demo Redis
Edit fail
app/config/routes.php
dan tambah routing untuk demonstrasi cache: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', ]); // Tambah routing 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
32Implementasi Redis Cache dalam Controller
Edit fail
app/controllers/IndexController.php
, 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 factory 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 cache Redis public function redisAction() { // Cipta factory serializer $serializerFactory = new SerializerFactory(); // Pilihan konfigurasi Redis, pastikan selaras dengan 'cache' dalam config.php $options = [ 'defaultSerializer' => 'Json', 'lifetime' => 3600, 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // 'auth' => 'kata_laluan_redis_anda', // jika perlu ]; // Cipta adapter Redis $cache = new Redis($serializerFactory, $options); $cacheKey = 'my_servbay_redis_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { // Jika 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); echo "Data stored in cache."; } else { // Jika data ada dalam cache echo "Data found in cache: "; } // Return data cache (atau baru dikemas kini) 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
68Nota: Praktis sebenar ialah daftar cache ke dalam container servis DI, supaya boleh diakses seluruh aplikasi.
Akses Contoh
Layari
https://servbay-phalcon-test.local/redis
:- Akses pertama akan memaparkan "Data not found in cache, fetching from source...Data stored in cache." dan "Data fetched from source: Hello Redis from ServBay!".
- Akses selepas itu (dalam tempoh cache) akan memaparkan "Data found in cache: " dan "Data fetched from source: Hello Redis from ServBay!" menandakan data diambil dari cache Redis.
Soalan Lazim (FAQ)
- S: Laman menunjukkan 404 Not Found, apa yang patut dibuat?
- J: Pastikan tetapan “root laman web” di ServBay menunjuk ke direktori
public
Phalcon (/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
). Sahkan pelayan web (Caddy/Nginx) dijalankan dengan baik dan domain setempat berfungsi.
- J: Pastikan tetapan “root laman web” di ServBay menunjuk ke direktori
- S: Ralat modul Phalcon tidak dijumpai (cth. Class 'Phalcon\Mvc\Application' not found)?
- J: Ini bermakna ekstensi Phalcon tidak diaktifkan untuk versi PHP berkenaan. Aktifkan melalui antaramuka ServBay dan restart servis PHP. Rujuk Cara Aktifkan Modul Phalcon ServBay.
- S: Sambungan pangkalan data gagal?
- J: Semak konfigurasi
app/config/config.php
— host, username, password dan nama pangkalan data. Pastikan servis MySQL/MariaDB dijalankan di ServBay, pengguna mempunyai akses serta pangkalan data sudah dicipta.
- J: Semak konfigurasi
Kesimpulan
ServBay memudahkan tugas menyediakan persekitaran pembangunan tempatan berprestasi tinggi untuk kerangka kerja Phalcon. Panduan ini menerangkan proses lengkap dari penciptaan rangka projek, konfigurasi pelayan web, hingga integrasi dengan MySQL dan Redis. Dengan integrasi alat bina dalam dan antaramuka pengurusan yang mudah, anda boleh lebih fokus kepada pembangunan aplikasi menggunakan Phalcon tanpa beban pengurusan persekitaran. Semoga panduan ini membantu anda memulakan pembangunan web yang cekap menggunakan ServBay dan Phalcon!