Membuat dan Menjalankan Proyek CakePHP dengan ServBay
ServBay adalah lingkungan pengembangan web lokal untuk macOS dan Windows yang mendukung berbagai bahasa pemrograman seperti PHP, Node.js, Python, Go, Java, dan database seperti MySQL, PostgreSQL, MongoDB, Redis, serta web server Caddy atau Nginx. ServBay menghadirkan platform yang praktis bagi developer untuk mengelola proyek lokal dengan mudah dan efisien.
Artikel ini akan memandu Anda membuat, mengonfigurasi, dan menjalankan proyek CakePHP di lingkungan ServBay. CakePHP adalah framework web PHP populer yang menerapkan pola MVC (Model-View-Controller), dikenal dengan kemampuannya untuk pengembangan cepat, ORM yang kuat, dan fitur keamanan bawaan. Dengan kemudahan ServBay, Anda bisa langsung mulai membangun aplikasi CakePHP.
Apa itu CakePHP?
CakePHP adalah framework open-source untuk pengembangan aplikasi web berbasis PHP. Framework ini memberikan struktur dasar untuk membangun aplikasi web dengan cepat dan rapi, tanpa mengurangi fleksibilitas. Dengan mengusung prinsip “convention over configuration”, banyak tugas pengembangan umum bisa dilakukan dengan lebih sederhana.
Fitur Utama dan Keunggulan CakePHP
- Berbasis Pola MVC: Organisasi kode yang jelas, mudah untuk dipelihara dan dikembangkan.
- Pengembangan Cepat: Tersedia tool CLI (Bake) untuk menghasilkan kode secara otomatis, mempercepat proses development.
- ORM (Object Relational Mapping) Kuat: Interaksi database menjadi sederhana, mendukung berbagai sistem database.
- Keamanan Bawaan: Perlindungan CSRF, pencegahan SQL injection, validasi input, dan fitur keamanan lain.
- Mesin Template Fleksibel: Dukungan untuk berbagai teknologi tampilan (view layer).
- Komunitas Aktif & Plugin Melimpah: Mudah menemukan bantuan dan memperluas fungsionalitas.
- Dokumentasi Lengkap: Tersedia panduan menyeluruh dan referensi API.
CakePHP cocok untuk membangun aplikasi web dari API sederhana hingga sistem enterprise yang kompleks.
Menyiapkan Lingkungan Pengembangan CakePHP dengan ServBay
ServBay memudahkan pengembangan CakePHP dengan integrasi:
- PHP dan ekstensi yang sudah terpasang.
- Composer sebagai manajer paket PHP.
- Server web yang dapat dikonfigurasi (Caddy/Nginx).
- Database terintegrasi (MySQL, PostgreSQL, Redis, dan lainnya).
Dengan ServBay, Anda dapat menghemat waktu dari instalasi manual dan konfigurasi komponen satu per satu.
Persyaratan Sebelum Memulai
Pastikan yang berikut ini sudah terpenuhi:
- Install ServBay: ServBay sudah diunduh dan terinstall dengan baik di macOS Anda.
- Jalankan ServBay: Buka aplikasi ServBay dan pastikan paket yang diperlukan (PHP, database seperti MySQL atau PostgreSQL, serta cache seperti Redis atau Memcached) sudah berjalan. Anda dapat mengelola layanan ini di tab “Packages” pada Control Panel ServBay.
- Pahami Dasar Penggunaan ServBay: Ketahui cara menambah dan mengatur situs web pada ServBay. Jika Anda baru menggunakan ServBay, baca dulu Panduan Penggunaan Dasar ServBay.
Membuat Proyek CakePHP
Direkomendasikan untuk menyimpan file proyek web Anda di direktori /Applications/ServBay/www
agar ServBay dapat mengenali dan mengelola situs dengan mudah.
Buka Terminal
Jalankan aplikasi Terminal di macOS.
Navigasi ke Direktori Root Website ServBay
Pindah ke folder tempat menyimpan situs sesuai rekomendasi ServBay:
bashcd /Applications/ServBay/www
1Buat Folder Proyek
Buat subfolder baru untuk proyek CakePHP Anda. Sebagai contoh:
bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2Buat Proyek CakePHP via Composer
Composer sudah tersedia di ServBay. Di dalam folder proyek, jalankan:
bashcomposer create-project --prefer-dist cakephp/app .
1Perintah ini akan mengunduh versi CakePHP terbaru beserta dependensinya ke direktori sekarang (
.
).Install Driver ORM (untuk PostgreSQL)
Jika Anda menggunakan PostgreSQL, instal driver ORM tambahan:
bashcomposer require cakephp/orm-pgsql
1Untuk MySQL, driver sudah tersedia dalam dependensi inti CakePHP.
Inisialisasi & Konfigurasi Dasar
Setelah proyek dibuat, lakukan beberapa konfigurasi, khususnya untuk koneksi database.
Konfigurasi Env & Koneksi Database
Pengaturan lingkungan lokal CakePHP utamanya ada di file
config/app_local.php
. Edit file ini, cari bagianDatasources
, dan sesuaikan data koneksi database. Default username ServBay:root
; password:password
.Contoh konfigurasi untuk MySQL:
php// config/app_local.php 'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, // atau \Cake\Database\Driver\Postgres::class untuk PostgreSQL 'persistent' => false, 'host' => '127.0.0.1', // alamat server database, default ServBay adalah lokal //'port' => '3306', // port default MySQL 3306, PostgreSQL 5432 'username' => 'root', // username default ServBay 'password' => 'password', // password default ServBay 'database' => 'servbay_cakephp_app', // nama database 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * Aktifkan quote identifiers jika nama tabel contohnya "user". * Jika nama tabel seperti "cake", bisa dimatikan. * Jika ragu, gunakan true. */ 'quoteIdentifiers' => false, /** * Keterbatasan saat ini, misal: * - Sebagian driver tidak mendukung isolation level via PDO. * - Tidak semua driver mendukung pengaturan charset via PDO. * - Opsi PDO tidak didukung untuk driver packaged seperti Postgres di CakePHP. * Untuk Postgres, cukup atur encoding saja. */ 'options' => [], //'url' => env('DATABASE_URL', null), // gunakan jika ingin memakai variabel lingkungan DATABASE_URL ], ],
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
36Sesuaikan
driver
danport
sesuai database yang Anda pakai, serta pastikan namadatabase
sudah sesuai.
Pengaturan Web Server (Membuat Website di ServBay)
Agar proyek CakePHP bisa diakses melalui browser, Anda perlu menambah site baru di ServBay yang mengarah ke folder proyek.
Buka Control Panel ServBay
Klik ikon ServBay, buka Control Panel.
Pergi ke Tab “Websites”
Pilih menu “Websites” di navigasi kiri (dulu disebut “Hosts”).
Tambah Website Baru
Klik tombol
+
untuk menambah site baru lalu isi:- Nama (Name): Misal
My CakePHP Dev Site
. - Domain: Misal
servbay-cakephp-test.local
. ServBay otomatis mengarahkan ke lokal. - Site Type: Pilih
PHP
. - Versi PHP: Pilih sesuai dengan versi CakePHP Anda (misal CakePHP 4+ membutuhkan PHP 7.4+, CakePHP 5+ membutuhkan PHP 8.1+). Contoh:
8.3
. - Document Root: Penting! Document root untuk proyek CakePHP adalah folder
webroot
di dalam proyek, bukan root utamanya. Atur ke/Applications/ServBay/www/servbay-cakephp-app/webroot
(gantiservbay-cakephp-app
sesuai nama folder Anda).
- Nama (Name): Misal
Simpan & Terapkan Perubahan
Setelah diisi, klik “Save”. ServBay akan meminta konfirmasi, klik setuju. ServBay secara otomatis akan mengkonfigurasi web server (Caddy/Nginx), mengarahkan domain ke folder
webroot
proyek Anda.
Untuk detail langkah pembuatan website, lihat menambah website pertama di ServBay.
Verifikasi Pengaturan Dasar
Sekarang, Anda sudah bisa mengakses website via browser.
Buka browser, kunjungi domain yang Anda atur, misal https://servbay-cakephp-test.local
.
Jika konfigurasi benar, Anda akan melihat halaman welcome default CakePHP, artinya lingkungan PHP, web server, dan pengaturan site ServBay sudah bekerja.
Integrasi Database dan Layanan Cache
CakePHP menyediakan ORM dan abstraksi cache yang kuat, sehingga mudah menghubungkan dengan database dan cache yang telah terintegrasi di ServBay.
Contoh Database Relasional (MySQL / PostgreSQL)
Berikut contoh menggunakan ORM CakePHP untuk koneksi database MySQL/PostgreSQL di ServBay, membuat tabel users
, dan operasi CRUD sederhana.
Buat Database di ServBay
Sebelum migrasi database, buat database baru di server ServBay. Gunakan phpMyAdmin (MySQL/MariaDB), pgAdmin (PostgreSQL), atau tool seperti Navicat/DBeaver, koneksikan ke server (biasanya
127.0.0.1
, user:root
, password:password
), lalu buat database bernamaservbay_cakephp_app
.Buat File Model ORM
Model digunakan ORM CakePHP untuk merepresentasikan tabel database. Buat file
UsersTable.php
untuk tabelusers
.Simpan kode berikut di
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // jika perlu validasi class UsersTable extends Table { /** * Inisialisasi model Users * * @param array $config Konfigurasi Table. * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // nama tabel yang digunakan $this->setDisplayField('name'); // field default ditampilkan saat relasi $this->setPrimaryKey('id'); // primary key // jika ingin memakai behavior timestamp // $this->addBehavior('Timestamp'); } /** * Validasi default untuk model Users * * @param \Cake\Validation\Validator $validator Instance validator. * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator): Validator { $validator ->scalar('name') ->maxLength('name', 255) ->requirePresence('name', 'create') ->notEmptyString('name'); $validator ->email('email') ->requirePresence('email', 'create') ->notEmptyString('email') ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); // pastikan email unik return $validator; } }
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
49Buat File Migrasi dengan Bake
Sangat disarankan memakai migrasi database. Di root proyek (
/Applications/ServBay/www/servbay-cakephp-app
), jalankan:bashbin/cake bake migration CreateUsers name:string email:string:unique
1Perintah ini membuat file migrasi untuk tabel
users
(field: name bertipe string, email unik).Jalankan Migrasi Database
Eksekusi perintah migrasi untuk membuat tabel
users
di database:bashbin/cake migrations migrate
1Cek database, harus sudah ada tabel baru
users
.Periksa Konfigurasi Koneksi Database
Pastikan konfigurasi di
config/app_local.php
sudah sesuai tipe dan kredensial database.Contoh MySQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', // ... konfigurasi lain ], ],
1
2
3
4
5
6
7
8
9
10
11Contoh PostgreSQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Postgres::class, 'host' => '127.0.0.1', // 'port' => '5432', // default port 'username' => 'root', // user default ServBay 'password' => 'password', // password default ServBay 'database' => 'servbay_cakephp_app', // ... konfigurasi lain ], ],
1
2
3
4
5
6
7
8
9
10
11
12
Tambahkan Route dan Method Contoh di Controller
Edit file
config/routes.php
untuk menambah route:php// config/routes.php use Cake\Routing\RouteBuilder; use Cake\Routing\Router; use Cake\Routing\Route\DashedRoute; Router::defaultRouteClass(DashedRoute::class); Router::scope('/', function (RouteBuilder $routes) { // ... route lain $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // route contoh database $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... route lain $routes->fallbacks(DashedRoute::class); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Lalu edit
src/Controller/PagesController.php
dan tambahkan:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // untuk handling error record class PagesController extends AppController { /** * Menampilkan halaman default * * @param array ...$path Segmen path. * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // ... tampilan default return new Response(['body' => 'Hello ServBay! Ini halaman default.']); } /** * Contoh database: tambah user */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // ambil instance Users Table // buat entitas user baru $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // contoh email ]); // coba simpan ke database if ($usersTable->save($user)) { return new Response(['body' => 'User berhasil ditambahkan! ID User: ' . $user->id]); } else { // jika gagal, mungkin error validasi $errors = $user->getErrors(); // ambil pesan error validasi return new Response(['body' => 'Gagal menambah user. Error: ' . json_encode($errors)]); } } /** * Contoh database: daftar user */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // instance Users Table // ambil semua user $users = $usersTable->find()->all(); // tampilkan dalam format JSON return new Response(['body' => json_encode($users->toArray())]); // ubah Collection jadi array } }
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
58Akses Contoh Database dari Browser
Buka browser:
- Kunjungi
https://servbay-cakephp-test.local/db-add-user
untuk menambah user. Jika sukses, akan muncul pesan sukses. - Kunjungi
https://servbay-cakephp-test.local/db-list-users
untuk melihat daftar user (harus ada user yang barusan ditambah).
- Kunjungi
Dengan langkah ini, proyek CakePHP Anda sudah terhubung ke database relasional di ServBay dan bisa melakukan operasi ORM dasar.
Contoh Layanan Cache (Memcached / Redis)
CakePHP memiliki API cache yang memudahkan switching antar engine cache seperti Memcached atau Redis. ServBay sudah menyediakan ekstensi PHP-nya dan service-nya.
Pastikan service Memcached atau Redis sudah berjalan via menu “Packages” di ServBay.
Konfigurasi Koneksi Cache
Edit bagian
Cache
pada fileconfig/app_local.php
.Contoh konfigurasi Memcached:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // alamat dan port default Memcached dari ServBay 'prefix' => 'servbay_cakephp_', // prefix key cache ], // ... konfigurasi cache lain ],
1
2
3
4
5
6
7
8
9Contoh konfigurasi Redis:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\RedisEngine::class, 'host' => '127.0.0.1', // alamat default Redis ServBay 'port' => 6379, // port default Redis 'password' => null, // isi jika Redis pakai password 'database' => 0, // index database 'prefix' => 'servbay_cakephp_', // prefix cache key ], // ... konfigurasi cache lain ],
1
2
3
4
5
6
7
8
9
10
11
12
Pilih dan konfigurasi sesuai service yang digunakan.
Tambah Route dan Method Controller Contoh
Tambahkan route di
config/routes.php
:php// config/routes.php // ... route lain $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... route lain
1
2
3
4
5Tambahkan method di
src/Controller/PagesController.php
:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // Import Cache class // ... use lain class PagesController extends AppController { // ... method lain (display, dbAddUser, dbListUsers) /** * Contoh cache: Memcached */ public function cacheMemcached(): Response { // pastikan konfigurasi 'default' menggunakan MemcachedEngine $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); // coba baca data dari cache $responseBody = ''; if ($cachedData === false) { // data tidak ada di cache $responseBody = 'Cache miss! Menyimpan "Hello Memcached!" ke cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { // cache ditemukan $responseBody = 'Cache hit! Data: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * Contoh cache: Redis */ public function cacheRedis(): Response { // pastikan konfigurasi 'default' menggunakan RedisEngine $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); $responseBody = ''; if ($cachedData === false) { $responseBody = 'Cache miss! Menyimpan "Hello Redis!" ke cache.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { $responseBody = 'Cache hit! Data: ' . $cachedData; } return new Response(['body' => $responseBody]); } }
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
59Akses Contoh Cache dari Browser
- Jika menggunakan Memcached: Buka
https://servbay-cakephp-test.local/cache-memcached
— kunjungan pertama akan menampilkan “Cache miss”, reload akan tampil “Cache hit”. - Jika menggunakan Redis: Buka
https://servbay-cakephp-test.local/cache-redis
— sama seperti di atas.
- Jika menggunakan Memcached: Buka
Ini membuktikan integrasi cache Memcached/Redis pada proyek CakePHP Anda berjalan baik di ServBay.
Hal-hal Penting
- Kredensial Database: Username & password default ServBay (
root
/password
) hanya untuk pengembangan lokal. Pada produksi, selalu gunakan kredensial yang aman. - Document Root Project: Pastikan document root website ServBay mengarah ke folder
webroot
, bukan folder utama proyek CakePHP. - Kompatibilitas Versi PHP: Sesuaikan versi PHP ServBay dengan versi CakePHP Anda. Lihat dokumentasi resmi CakePHP untuk syarat versi.
- Port ServBay: Jika port default (80/443) sudah digunakan aplikasi lain, ubah port di pengaturan ServBay dan akses situs sesuai port.
FAQ – Tanya Jawab
- Q: Tidak bisa mengakses
servbay-cakephp-test.local
, muncul error “halaman tidak ditemukan”?- A: Periksa apakah document root web sudah benar mengarah ke
/Applications/ServBay/www/servbay-cakephp-app/webroot
. - Pastikan server web ServBay (Caddy/Nginx) sudah berjalan.
- Cek apakah file hosts sudah memetakan
servbay-cakephp-test.local
ke127.0.0.1
(ServBay biasanya otomatis, tapi bisa dicek ulang). - Pastikan file
.htaccess
di CakePHP (webroot/.htaccess
) atau konfigurasi server web sudah benar.
- A: Periksa apakah document root web sudah benar mengarah ke
- Q: Database gagal terkoneksi?
- A: Pastikan layanan database ServBay (MySQL/PostgreSQL) sudah berjalan.
- Periksa info koneksi di
config/app_local.php
(host, port, username, password, database) sudah benar dan sesuai dengan pengaturan ServBay. - Pastikan database
servbay_cakephp_app
sudah dibuat di server.
- Q: Perintah Composer (
bin/cake
) tidak bisa dijalankan?- A: Pastikan Anda sudah di folder root proyek CakePHP (
/Applications/ServBay/www/servbay-cakephp-app
). - Pastikan ServBay sudah menjalankan service PHP & Composer.
- Pastikan command
php
dapat dijalankan di terminal (ServBay biasanya menambah PHP ke PATH). Bisa gunakan terminal bawaan ServBay, atau atur PATH manual.
- A: Pastikan Anda sudah di folder root proyek CakePHP (
Kesimpulan
ServBay memungkinkan Anda membangun lingkungan pengembangan lokal CakePHP dengan cepat dan mudah. PHP, Composer, server web, dan database sudah tersedia, sehingga konfigurasi menjadi simpel. Artikel ini mengupas tuntas proses pembuatan proyek, konfigurasi dasar, setup web server, integrasi database relasional dan cache dengan contoh kode siap pakai — Anda bisa langsung mulai membangun aplikasi CakePHP dengan fokus pada pengembangan fitur, tanpa repot urusan setup lingkungan.