Membuat & Menjalankan Proyek Phalcon
Apa itu Phalcon?
Phalcon adalah framework Web PHP open source dengan performa tinggi yang diimplementasikan sebagai ekstensi C. Pendekatan unik ini membuat Phalcon sangat hemat sumber daya dan memiliki kecepatan eksekusi yang luar biasa, melebihi sebagian besar framework PHP tradisional. Phalcon mengikuti pola arsitektur MVC (Model-View-Controller) dan menyediakan komponen kaya seperti ORM (Object-Relational Mapping), template engine, routing, caching, event manager, serta lainnya. Semua ini bertujuan untuk membantu pengembang membangun aplikasi web dan API yang kuat dan berperforma tinggi secara cepat.
Fitur Utama & Keunggulan Phalcon
- Performa Luar Biasa: Dengan berjalan sebagai ekstensi C, Phalcon menghindari overhead parsing & loading skrip PHP, memberikan kinerja setara native.
- Efisiensi Sumber Daya: Penggunaan memori sangat rendah, cocok untuk aplikasi dengan tuntutan performa dan skalabilitas tinggi.
- Fitur Lengkap: Sudah dilengkapi mayoritas komponen inti web development, sehingga meminimalisasi ketergantungan pada library pihak ketiga.
- Mudah Digunakan: API yang jelas dan konsisten dengan dokumentasi lengkap, sehingga pemula Phalcon pun dapat cepat menguasainya.
- Decoupling Tinggi: Tiap komponen didesain mandiri, sehingga pengembang bebas memilih atau mengganti komponen sesuai kebutuhan proyek.
- Keamanan: Dilengkapi berbagai fitur keamanan seperti filtering input, perlindungan CSRF, dan banyak lainnya.
Phalcon sangat ideal untuk membangun aplikasi web dan API yang butuh performa tinggi dan efisiensi sumber daya, khususnya jika Anda mendambakan kecepatan dan skalabilitas.
Membuat Proyek Phalcon dengan ServBay
ServBay adalah lingkungan pengembangan web lokal untuk macOS yang sudah terintegrasi beragam versi PHP, database (seperti MySQL, PostgreSQL, MongoDB, Redis), web server (Caddy, Nginx, Apache), serta berbagai tools pengembang lain. Dengan ServBay, Anda dengan mudah dapat membangun dan mengelola lingkungan untuk proyek Phalcon.
Panduan ini akan memandu Anda menggunakan lingkungan PHP dari ServBay untuk membuat proyek Phalcon dasar, mengatur web server agar dapat diakses, serta memberikan contoh integrasi dengan database relasional (MySQL) dan database NoSQL (Redis).
Prasyarat
Sebelum mulai, pastikan Anda telah memenuhi syarat berikut:
- ServBay Sudah Terpasang & Berjalan: Pastikan Anda telah menginstal dan menjalankan ServBay di macOS.
- Versi PHP yang Dibutuhkan Sudah Aktif: Di dalam ServBay, pastikan versi PHP yang ingin Anda pakai sudah diaktifkan.
- Modul Phalcon Aktif: ServBay telah menyediakan modul Phalcon, namun secara default mungkin belum diaktifkan. Ikuti panduan pada dokumen Cara Mengaktifkan Modul Phalcon di ServBay untuk mengaktifkan ekstensi Phalcon sesuai versi PHP yang dipakai, lalu restart layanan PHP.
- Composer Siap Pakai: ServBay sudah menyertakan Composer, Anda tidak perlu menginstal secara terpisah. Pastikan Anda dapat menjalankan perintah
composer
langsung dari terminal.
Versi Phalcon & DevTools
Framework Phalcon dan alat pengembangnya (Phalcon DevTools) harus sesuai dengan versi PHP yang digunakan. Tabel berikut menunjukkan kecocokan antara versi PHP populer dan versi Phalcon & DevTools yang disarankan:
Versi PHP | Versi Framework Phalcon | Versi Phalcon DevTools | 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 (Resmi) | DevTools resmi mungkin kurang kompatibel pada PHP 8.x. |
PHP 8.3, 8.4 | Phalcon 5.x | dev-master (repo versi perbaikan) | Disarankan memakai versi komunitas yang telah diperbaiki. |
Catatan Penting: Untuk PHP 8.x ke atas, kompatibilitas Phalcon DevTools resmi kurang baik. Sebaiknya gunakan versi hasil perbaikan komunitas. Langkah-langkah pada panduan ini akan menunjukkan cara memasang DevTools versi perbaikan via Composer.
Membuat Proyek Phalcon
Jalur Penyimpanan Website yang Direkomendasikan
Untuk kemudahan manajemen, ServBay menganjurkan agar seluruh proyek website disimpan di direktori root default /Applications/ServBay/www
. Contoh berikut juga akan menggunakan jalur ini.
Masuk ke Direktori Root & Buat Folder Proyek
Buka terminal, menuju direktori root website ServBay, lalu buat folder baru untuk proyek Phalcon Anda (misalnya
servbay-phalcon-app
):bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Install Phalcon DevTools
Phalcon DevTools adalah kumpulan command line tools untuk mempercepat generate kode, membuat struktur proyek, pengelolaan migrasi database, dan lainnya. Kita akan memanfaatkan Composer untuk instalasi sesuai versi PHP:
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 (Phalcon DevTools versi perbaikan
dev-master
): Karena DevTools resmi kurang kompatibel dengan PHP 8.x, kita perlu menambahkan konfigurasi repository komunitas padacomposer.json
di root proyek (/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
13Lalu jalankan perintah update Composer untuk instalasi DevTools:
bashcomposer update
1
Composer akan membuat folder
vendor
pada root proyek, dan file executable DevTools berada divendor/bin/phalcon
.Buat Struktur Dasar Proyek dengan DevTools
Sekarang gunakan DevTools untuk membuat kerangka struktur file proyek Phalcon. Buat subdirektori (misal juga bernama
servbay-phalcon-app
sesuai default DevTools):bashvendor/bin/phalcon project servbay-phalcon-app
1Perintah ini menciptakan subfolder
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
dan mengisi dengan struktur proyek Phalcon komplet.Masuk ke Direktori Kode Proyek
Masuk ke dalam direktori kode yang baru dibuat, aktivitas selanjutnya dilakukan di direktori ini:
bashcd servbay-phalcon-app
1Sekarang Anda berada di
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
.
Konfigurasi Lingkungan Proyek
Konfigurasi proyek Phalcon umumnya terpusat pada file app/config/config.php
. Di file ini Anda perlu mengatur detail koneksi basis data, path aplikasi, dan konfigurasi penting lain.
Edit File Konfigurasi
Buka file
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/config.php
dengan editor favorit Anda. Temukan atau tambahkan bagian konfigurasi database. Default MySQL/MariaDB ServBay user adalahroot
dan tanpa password, namun demi keamanan ServBay sangat menyarankan mengganti password kuat. Pada contoh, gunakanpassword
sebagai placeholder, sesuaikan dengan pengaturan nyata Anda. Nama databaseservbay_phalcon_app
hanyalah contoh (database harus dibuat manual lebih dulu).phpreturn new \Phalcon\Config([ // ... konfigurasi lain ... 'database' => [ 'adapter' => 'Mysql', // Bisa juga 'Postgres', dsb. 'host' => '127.0.0.1', 'username' => 'root', // User root default ServBay 'password' => 'password', // <-- Ganti dengan password database Anda 'dbname' => 'servbay_phalcon_app', // <-- Ganti dengan nama database Anda ], // ... konfigurasi lain ... ]);
1
2
3
4
5
6
7
8
9
10
11Penting: Pastikan layanan database (MySQL/MariaDB) sudah dijalankan pada ServBay dan user serta password-nya sesuai dengan konfigurasi ini. Database
servbay_phalcon_app
juga harus sudah dibuat manual menggunakan tools seperti phpMyAdmin atau Adminer yang disediakan ServBay.
Konfigurasi Web Server (Menggunakan Fitur Website ServBay)
Agar proyek Phalcon bisa diakses via browser, gunakan fitur Website di ServBay untuk membuat virtual host yang mengarah ke direktori web-accessible dari proyek.
- Buka Aplikasi ServBay
- Masuk ke Pengaturan 'Website': Di halaman utama ServBay, klik opsi 'Website'.
- Tambahkan Website Baru: Klik tombol tambah website.
- Nama: Masukkan nama yang mudah dikenali, misal
My First Phalcon Dev Site
. - Domain: Isikan domain yang akan diakses melalui browser, contoh
servbay-phalcon-test.local
. ServBay otomatis mengarahkan domain.local
ke lokal. - Tipe Website: Pilih
PHP
. - Versi PHP: Gunakan versi PHP yang sudah diaktifkan dan mendukung Phalcon.
- Root Website: Ini sangat krusial. File entry point Phalcon (
index.php
) umumnya ada di folderpublic
. Jadi, set root ke:/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
.
- Nama: Masukkan nama yang mudah dikenali, misal
- Simpan Pengaturan: Simpan konfigurasi website baru. ServBay akan menerapkan perubahan ini—terkadang butuh restart web server (Caddy/Nginx).
Rincian langkah dapat dilihat di Menambah Website Pertama. Selesai mengkonfigurasi, ServBay akan otomatis mengurus local domain resolusi dan setup webserver.
Menambahkan Kode Contoh
Mari tambahkan kode sederhana untuk memverifikasi bahwa proyek sudah berjalan dengan baik.
Konfigurasi Routing
Sunting file
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/routes.php
untuk menambahkan aturan sederhana penanganan path/
:php<?php use Phalcon\Mvc\Router; $router = new Router(false); // Definisikan routing default, mapping '/' ke IndexController@indexAction $router->add( '/', [ 'controller' => 'index', 'action' => 'index', ] ); // ... tambahkan aturan routing lain jika diperlukan ... $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
19Buat Controller
Edit
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/controllers/IndexController.php
(buat file jika belum ada), lalu buat methodindexAction
sederhana:php<?php namespace App\Controllers; // Pastikan namespace sudah benar use Phalcon\Mvc\Controller; class IndexController extends Controller { // Menangani request ke path '/' public function indexAction() { // Mengembalikan string respon sederhana return 'Hello ServBay!'; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Mengakses Website
Setelah file disimpan dan ServBay berjalan, buka browser dan akses domain yang dikonfigurasi:
https://servbay-phalcon-test.local
Jika semua pengaturan tepat, Anda akan melihat output Hello ServBay!
di browser.
Integrasi Database
Phalcon menyediakan database abstraction layer dan ORM yang tangguh. ServBay juga sudah terintegrasi dengan berbagai database, sehingga mudah digunakan di proyek Phalcon. Berikut contoh penggunaan MySQL dan Redis.
Contoh Database Relasional: MySQL
Demo cara Phalcon mengkoneksikan ke MySQL ServBay dan melakukan operasi insert/query sederhana.
Membuat Struktur Database (dengan Migration)
Phalcon DevTools menyediakan fitur migration untuk versioning skema basis data.
Generate Migration Baru: Di direktori proyek (
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
), jalankan:bashvendor/bin/phalcon migration generate
1Akan tercipta file migration baru di folder
migrations
, bernama sepertiYYYYMMDDHHMMSS_MigrationName.php
.Edit File Migration: Sunting migration tersebut di method
morph
untuk mendefinisikan tabelusers
sederhana:php<?php use Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; /** * Class UsersMigration_100 */ class UsersMigration_100 extends Migration // Pastikan nama class sesuai nama file { /** * 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', ], ]); } /** * Reverse migrasi * * @return void */ public function down() { // Opsi: logika rollback, misal drop tabel // $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
70Catatan: Pastikan nama class (
UsersMigration_100
) sesuai dengan nama file migration.Jalankan Migration: Masih di direktori proyek, jalankan:
bashvendor/bin/phalcon migration run
1Jika terjadi error koneksi, cek konfigurasi database di
app/config/config.php
dan pastikan layanan MySQL/MariaDB di ServBay berjalan.
Konfigurasi Koneksi Database (Sudah Dilakukan di Atas)
Pastikan bagian
'database'
padaapp/config/config.php
mengarah ke server MySQL/MariaDB ServBay (127.0.0.1
, port 3306, userroot
, password sesuai pengaturan).Tambah Routing Contoh
Edit
app/config/routes.php
untuk menambah route insert dan query data user:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); // Route untuk insert user $router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); // Route untuk query user $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
31Implementasi Operasi Database pada Controller
Edit
app/controllers/IndexController.php
, lalu tambahkan methodmysqlAddAction
danmysqlAction
. Kita menggunakan koneksi database Phalcon langsung.php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; // Import adaptor MySQL use Phalcon\Db\Enum; // Untuk mode fetchAll class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } // Contoh insert user public function mysqlAddAction() { // In real apps, gunakan DI container, ini hanya contoh cepat! $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Ganti dengan password database Anda 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', // Direkomendasikan ]); // Insert user sample $success = $connection->insert( 'users', // Table ['ServBay Demo User', '[email protected]'], // Values ['name', 'email'] // Columns ); echo $success ? 'User added successfully.' : 'Failed to add user.'; } // Contoh query user public function mysqlAction() { // Koneksi database $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Ganti dengan password database Anda 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Fetch all user $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); // Output hasil 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
56Catatan: Pada aplikasi nyata, sebaiknya setup koneksi database via DI container, bukan buat instance baru di setiap pemanggilan.
Coba Akses
- Kunjungi
https://servbay-phalcon-test.local/mysql-add
di browser, jika berhasil Anda melihat "User added successfully." - Buka
https://servbay-phalcon-test.local/mysql
untuk output data tabelusers
dalam format JSON (termasuk record yang barusan ditambah).
- Kunjungi
Contoh Database NoSQL: Redis
Berikut contoh memakai layanan Redis ServBay sebagai cache dalam proyek Phalcon.
Cek Ekstensi Redis
Paket PHP ServBay biasanya sudah menyertakan extension Redis. Cukup pastikan PHP versi yang dipakai sudah mengaktifkan extension ini di ServBay.
Konfigurasi Koneksi Redis
Tambahkan pengaturan Redis di
app/config/config.php
. Default Redis ServBay berjalan di127.0.0.1
port 6379.phpreturn new \Phalcon\Config([ // ... konfigurasi lain ... 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // Index default Redis 'persistent' => false, 'auth' => null, // Isi jika Redis Anda pakai password ], // ... konfigurasi lain ... ]);
1
2
3
4
5
6
7
8
9
10
11
12Tambah Routing Contoh
Tambahkan route di
app/config/routes.php
untuk mendemokan cache Redis: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', ]); // Route untuk demo Redis cache $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 di Controller
Edit
app/controllers/IndexController.php
lalu tambahkan methodredisAction
berikut: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 cache Redis public function redisAction() { // Instansiasi serializer factory $serializerFactory = new SerializerFactory(); // Opsi Redis, samakan dengan bagian 'cache' di config.php $options = [ 'defaultSerializer' => 'Json', // Serialisasi default JSON 'lifetime' => 3600, // Masa aktif cache (detik), misal 1 jam 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // 'auth' => 'password_redis_anda', // Isi jika diperlukan ]; // Siapkan adapter Redis $cache = new Redis($serializerFactory, $options); $cacheKey = 'my_servbay_redis_cache_key'; $cachedData = $cache->get($cacheKey); // Cek data cache if ($cachedData === null) { // Jika belum ada data 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 { // Jika sudah ada di cache echo "Data found in cache: "; } // Kembalikan data 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
68Catatan: Pada praktik nyata, biasanya konfigurasi cache didaftarkan sebagai bagian dari DI container agar mudah dipakai di seluruh aplikasi.
Uji Akses
Buka
https://servbay-phalcon-test.local/redis
di browser.- Pada akses pertama: tampil "Data not found in cache, fetching from source...Data stored in cache." serta "Data fetched from source: Hello Redis from ServBay!"
- Pada akses berikutnya (sepanjang cache belum expired): ditampilkan "Data found in cache:" dan "Data fetched from source: Hello Redis from ServBay!", menunjukkan data diambil dari Redis.
FAQ (Pertanyaan yang Sering Ditanyakan)
- Q: Mengapa muncul 404 Not Found saat mengunjungi website?
- A: Pastikan di menu Website pada ServBay, "Root Website" telah diatur ke folder
public
milik proyek Phalcon (/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
). Cek juga web server (Caddy/Nginx) sudah aktif dan domain lokal berhasil di-resolve.
- A: Pastikan di menu Website pada ServBay, "Root Website" telah diatur ke folder
- Q: Error modul Phalcon tidak ditemukan (misal: Class 'Phalcon\Mvc\Application' not found)?
- A: Ini biasanya menunjukkan ekstensi Phalcon belum aktif di PHP yang dipakai. Pastikan di ServBay versi PHP-nya sudah dicentang Phalcon extension-nya lalu restart PHP. Lihat Cara Mengaktifkan Modul Phalcon di ServBay.
- Q: Gagal koneksi database, apa yang harus dilakukan?
- A: Cek file
app/config/config.php
pada bagian koneksi database (host, user, password, dbname). Pastikan database server aktif, user/pass sudah benar, dan database sudah dibuat.
- A: Cek file
Kesimpulan
Dengan ServBay, membangun lingkungan pengembangan lokal untuk framework Phalcon bisa dilakukan dengan sangat mudah. Panduan ini mengajak Anda mulai dari membangun struktur dasar proyek, setup web server, hingga integrasi dengan MySQL dan Redis. Berbagai paket dan interface manajemen yang disediakan ServBay sangat memudahkan setup dan pemeliharaan, sehingga Anda dapat fokus sepenuhnya pada pengembangan aplikasi Phalcon Anda. Semoga tutorial ini bermanfaat dalam memulai perjalanan pengembangan web menggunakan ServBay dan Phalcon!