Membuat dan Menjalankan Proyek CakePHP dengan ServBay
ServBay adalah lingkungan pengembangan web lokal yang dirancang khusus untuk macOS, terintegrasi dengan berbagai bahasa pemrograman seperti PHP, Node.js, Python, Go, Java, serta layanan database seperti MySQL, PostgreSQL, MongoDB, Redis, dan server web Caddy atau Nginx. ServBay menyediakan platform pengembangan yang praktis dan efisien sehingga developer dapat dengan mudah mengatur dan mengelola proyek lokal.
Artikel ini akan memandu Anda cara membuat, mengkonfigurasi, dan menjalankan proyek CakePHP di lingkungan ServBay. CakePHP adalah framework pengembangan web PHP populer yang mengadopsi pola MVC (Model-View-Controller), terkenal berkat kecepatan pengembangan, ORM yang kuat, dan fitur keamanan bawaan. Dengan kepraktisan ServBay, Anda dapat langsung memulai pengembangan menggunakan CakePHP.
Apa itu CakePHP?
CakePHP adalah framework pengembangan aplikasi web open source berbasis PHP yang menyediakan kerangka kerja dasar untuk mengembangkan aplikasi web secara cepat dan terstruktur tanpa mengorbankan fleksibilitas. Framework ini mengikuti prinsip convention over configuration, sehingga berbagai tugas pengembangan dapat dilakukan lebih sederhana.
Fitur dan Keunggulan Utama CakePHP
- Berdasarkan Pola MVC: Struktur kode yang jelas, mudah di-maintain dan dikembangkan.
- Pengembangan Cepat: Tools command line (Bake) untuk menghasilkan kode otomatis dan mempercepat workflow.
- ORM (Object Relational Mapping) Kuat: Permudah interaksi dengan database dan mendukung banyak sistem database.
- Keamanan Bawaan: Perlindungan terhadap CSRF, SQL injection, validasi input, dan fitur keamanan lainnya.
- Mesin Template Fleksibel: Mendukung berbagai teknologi view layer.
- Komunitas Aktif & Plugin Berlimpah: Mudah menemukan dukungan dan memperluas fitur.
- Dokumentasi Lengkap: Panduan komprehensif dan referensi API tersedia.
CakePHP cocok untuk membangun aplikasi web dengan berbagai skala, dari API sederhana hingga sistem tingkat enterprise yang kompleks.
Menyiapkan Lingkungan Pengembangan CakePHP dengan ServBay
ServBay menyediakan lingkungan terintegrasi untuk pengembangan CakePHP, meliputi:
- PHP interpreter dan ekstensi populer yang sudah terpasang.
- Composer package manager terinstal otomatis.
- Web server yang mudah dikonfigurasi (Caddy/Nginx).
- Layanan database terintegrasi (MySQL, PostgreSQL, Redis, dll).
Dengan ServBay, Anda tidak perlu repot menginstal dan mengatur komponen satu per satu secara manual.
Prasyarat
Sebelum memulai, pastikan Anda sudah menyiapkan berikut ini:
- Instal ServBay: Pastikan ServBay sudah diunduh dan terinstal di macOS Anda.
- Jalankan Layanan ServBay: Buka aplikasi ServBay dan pastikan paket perangkat lunak yang diperlukan (seperti PHP, database seperti MySQL atau PostgreSQL, serta layanan cache seperti Redis atau Memcached) sudah aktif. Anda bisa mengelolanya di tab “Paket” pada kontrol panel ServBay.
- Pahami Dasar Operasi ServBay: Ketahui cara menambah dan mengatur situs di ServBay. Jika belum familiar, disarankan membaca Panduan Dasar Penggunaan ServBay terlebih dahulu.
Membuat Proyek CakePHP
ServBay merekomendasikan agar file proyek web ditempatkan di direktori /Applications/ServBay/www
, sehingga situs Anda akan dikenali dan dikelola otomatis oleh ServBay.
Buka Terminal
Buka aplikasi Terminal di macOS.
Arahkan ke Root Direktori Website ServBay
Berpindahlah ke direktori yang direkomendasikan ServBay:
bashcd /Applications/ServBay/www
1Buat Direktori Proyek
Buat subdirektori baru untuk proyek CakePHP Anda. Sebagai contoh, gunakan nama proyek
servbay-cakephp-app
:bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2Buat Proyek CakePHP Menggunakan Composer
Composer sudah terinstal di ServBay. Di dalam direktori proyek, gunakan Composer untuk menginisiasi skeleton proyek CakePHP:
bashcomposer create-project --prefer-dist cakephp/app .
1Perintah ini akan mengunduh versi stabil terbaru CakePHP beserta dependensinya ke direktori aktif (
.
).Instalasi ORM Driver (Jika Menggunakan PostgreSQL)
Jika Anda ingin menggunakan database PostgreSQL, instal ORM driver tambahan berikut:
bashcomposer require cakephp/orm-pgsql
1Untuk MySQL, Anda biasanya tidak perlu menginstal driver tambahan karena sudah termasuk dalam dependensi inti CakePHP.
Konfigurasi Awal
Setelah proyek dibuat, lakukan beberapa konfigurasi dasar – khususnya untuk koneksi database.
Atur Environment Variable dan Koneksi Database
Konfigurasi utama lingkungan lokal CakePHP ada di file
config/app_local.php
. Edit file ini, temukan bagianDatasources
, lalu sesuaikan koneksi database Anda. Username database default ServBay biasanyaroot
, dan password default-nyapassword
.Contoh konfigurasi koneksi database 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 biasanya 5432 'username' => 'root', // Username default ServBay 'password' => 'password', // Password default ServBay 'database' => 'servbay_cakephp_app', // Nama database yang akan Anda buat 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * Set identifier quoting to true if you are using words like "user" as your table name. * But if you are using words like "cake" you can set it to false. * If you don't know use true. */ 'quoteIdentifiers' => false, /** * Current limitations include the following: * - Most drivers do not support setting isolation levels via PDO options. * Using them will result in an error. * - Not all drivers support setting the charset via PDO options. * Using them will result in an error. * - PDO options are not supported for packaged drivers like Postgres from CakePHP. * For Postgres, you only need to set the encoding. */ 'options' => [], //'url' => env('DATABASE_URL', null), // Jika menggunakan environment variable DATABASE_URL, aktifkan baris ini ], ],
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
38Sesuaikan
driver
danport
sesuai database yang dipakai (MySQL atau PostgreSQL). Pastikan namadatabase
sama seperti database yang akan Anda buat.
Konfigurasi Server Web (Membuat Website di ServBay)
Agar proyek CakePHP dapat diakses melalui browser, Anda perlu mengatur website baru di ServBay yang mengarah ke direktori proyek Anda.
Buka Kontrol Panel ServBay
Klik ikon ServBay untuk membuka control panel.
Buka Tab "Website"
Pada panel ServBay, pilih “Website” pada navigasi di sebelah kiri (dahulu disebut "Host").
Tambah Website Baru
Klik tombol
+
di bagian bawah untuk menambah situs baru. Isi informasi berikut:- Nama (Name): Buat nama yang mudah diingat, misal
My CakePHP Dev Site
. - Domain: Atur domain lokal, misal
servbay-cakephp-test.local
. ServBay akan otomatis mengarahkannya ke lokal. - Site Type: Pilih
PHP
. - PHP Version: Pilih versi PHP yang kompatibel, misal PHP 8.3 (CakePHP 4+ butuh PHP 7.4+, CakePHP 5+ umumnya PHP 8.1+).
- Website Root (Document Root): Penting! Document root server web untuk CakePHP bukan direktori utama proyek, tapi folder
webroot
di dalamnya. Set ke/Applications/ServBay/www/servbay-cakephp-app/webroot
(gantiservbay-cakephp-app
dengan nama direktori proyek Anda).
- Nama (Name): Buat nama yang mudah diingat, misal
Simpan dan Terapkan Pengaturan
Setelah semua terisi, klik tombol “Simpan” di kanan bawah. ServBay akan meminta konfirmasi untuk menerapkan perubahan – klik konfirmasi. ServBay akan langsung mengatur server web (Caddy atau Nginx) agar merespons permintaan ke
servbay-cakephp-test.local
dan mengarahkannya kewebroot
proyek Anda.
Panduan langkah demi langkah menambahkan situs juga tersedia di Menambahkan Website Pertama dokumentasi ServBay.
Verifikasi Pengaturan Dasar
Sekarang Anda bisa mengakses situs yang sudah dibuat lewat browser.
Buka browser, lalu akses domain yang Anda set di ServBay, misal https://servbay-cakephp-test.local
.
Jika sudah dikonfigurasi dengan benar, Anda akan melihat halaman selamat datang dari CakePHP. Ini menandakan environment PHP, server web, dan konfigurasi website ServBay sudah berjalan dengan baik.
Integrasi Database dan Layanan Cache
CakePHP menawarkan ORM dan sistem cache yang mudah digunakan untuk menghubungkan layanan database dan cache yang disediakan ServBay.
Contoh Database Relasional (MySQL / PostgreSQL)
Berikut contoh menghubungkan ORM CakePHP ke database MySQL atau PostgreSQL di ServBay, membuat tabel users
, serta operasi CRUD dasar.
Buat Database di ServBay
Sebelum migrasi database, buat database baru melalui alat manajemen database ServBay (seperti phpMyAdmin untuk MySQL/MariaDB, pgAdmin untuk PostgreSQL, atau alat pihak ketiga seperti Navicat/DBeaver). Koneksikan ke database (
127.0.0.1
, user:root
, password:password
), lalu buat databaseservbay_cakephp_app
.Buat File Model ORM
ORM CakePHP memerlukan file Model untuk mewakili tabel database. Buat file
UsersTable.php
sebagai representasi tabelusers
.Simpan kode berikut di
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // Untuk rule validasi jika dibutuhkan class UsersTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // Tentukan nama tabel $this->setDisplayField('name'); // Kolom default untuk asosiasi/diplay $this->setPrimaryKey('id'); // Primary key // Jika butuh behaviour timestamp // $this->addBehavior('Timestamp'); } /** * Default validation rules. * * @param \Cake\Validation\Validator $validator Validator instance. * @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 Migration File dengan Bake Tool
CakePHP merekomendasikan migrasi database untuk mengelola struktur database. Dari root proyek (
/Applications/ServBay/www/servbay-cakephp-app
), gunakan Bake untuk membuat file migrasi untuk tabelusers
:bashbin/cake bake migration CreateUsers name:string email:string:unique
1Perintah ini akan membuat file migrasi baru berisi instruksi membuat tabel
users
dengan kolomname
(string) danemail
(string, unik).Jalankan Database Migration
Jalankan perintah migrasi untuk benar-benar membuat tabel
users
di database:bashbin/cake migrations migrate
1Jika berhasil, Anda akan melihat tabel
users
baru di database.Konfigurasi Koneksi Database (Jika Belum Dilakukan)
Pastikan konfigurasi
Datasources.default
diconfig/app_local.php
sesuai dengan database dan kredensial Anda.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', // Port default 'username' => 'root', // Username 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
Tambah Routing & Metode Controller Contoh
Modifikasi file
config/routes.php
dan tambahkan routing untuk menambah dan menampilkan data user: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
18Edit file
src/Controller/PagesController.php
dan tambahkan metode berikut untuk operasi database:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // Untuk penanganan exception jika data tidak ditemukan class PagesController extends AppController { /** * Displays a view * * @param array ...$path Path segments. * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // ... metode display default return new Response(['body' => 'Hello ServBay! This is the default page.']); } /** * Contoh Database: Tambah User */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Dapatkan instance Tabel Users // Buat entitas user baru $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => '[email protected]' // Email contoh ServBay ]); // Coba simpan entitas ke database if ($usersTable->save($user)) { return new Response(['body' => 'User berhasil ditambahkan! User ID: ' . $user->id]); } else { // Jika gagal simpan, mungkin karena validasi dsb. $errors = $user->getErrors(); // Ambil info error validasi return new Response(['body' => 'Gagal menambah user. Error: ' . json_encode($errors)]); } } /** * Contoh Database: List Semua User */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Dapatkan instance Tabel Users // Cari semua user $users = $usersTable->find()->all(); // Ubah hasil ke array JSON dan tampilkan return new Response(['body' => json_encode($users->toArray())]); // Gunakan toArray() untuk convert collection menjadi 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
Buka browser:
- Buka
https://servbay-cakephp-test.local/db-add-user
untuk menambah user. Anda akan melihat notifikasi sukses. - Buka
https://servbay-cakephp-test.local/db-list-users
untuk melihat daftar user (seharusnya sudah ada user baru).
- Buka
Dengan langkah di atas, Anda sudah berhasil mengintegrasikan database relasional di ServBay dengan proyek CakePHP dan menjalankan operasi ORM dasar.
Contoh Layanan Cache (Memcached / Redis)
CakePHP memiliki API cache yang seragam, sehingga Anda bisa leluasa berganti engine (seperti Memcached atau Redis). ServBay sudah menyediakan ekstensi PHP untuk Memcached & Redis dan menjalankan servicenya.
Pastikan Anda sudah menyalakan layanan Memcached atau Redis dari kontrol panel ServBay.
Konfigurasi Koneksi Cache
Edit file
config/app_local.php
pada bagianCache
untuk menyesuaikan koneksi cache.Contoh konfigurasi Memcached:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // Alamat & port default Memcached ServBay 'prefix' => 'servbay_cakephp_', // Prefix kunci 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 Redis ServBay 'password' => null, // Jika Redis pakai password, isikan di sini 'database' => 0, // Index database Redis 'prefix' => 'servbay_cakephp_', // Prefix kunci cache ], // ... konfigurasi cache lain ],
1
2
3
4
5
6
7
8
9
10
11
12
Pilih dan atur sesuai engine cache yang Anda pakai.
Tambah Routing dan Metode Controller Contoh
Edit
config/routes.php
dan tambahkan route untuk cache demo: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
5Edit juga
src/Controller/PagesController.php
, tambahkan metode berikut untuk contoh cache:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // Import class Cache // ... use lain class PagesController extends AppController { // ... metode lain (display, dbAddUser, dbListUsers) /** * Contoh Cache: Memcached */ public function cacheMemcached(): Response { // Pastikan 'default' cache di app_local.php pakai MemcachedEngine $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); // Coba baca dari cache $responseBody = ''; if ($cachedData === false) { // Tidak ada di cache $responseBody = 'Cache miss! Menulis "Hello Memcached!" ke cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); // Tulis ke cache engine Memcached } else { // Ada di cache $responseBody = 'Cache hit! Data dari cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * Contoh Cache: Redis */ public function cacheRedis(): Response { // Pastikan 'default' cache di app_local.php pakai RedisEngine $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); // Coba baca dari cache $responseBody = ''; if ($cachedData === false) { // Tidak ada di cache $responseBody = 'Cache miss! Menulis "Hello Redis!" ke cache.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); // Tulis ke cache engine Redis } else { // Ada di cache $responseBody = 'Cache hit! Data dari cache: ' . $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
59
60
61Akses Contoh Cache
Buka browser:
- Jika menggunakan Memcached, buka
https://servbay-cakephp-test.local/cache-memcached
. Kunjungan pertama akan menampilkan “Cache miss”, setelah direfresh akan menjadi “Cache hit”. - Jika menggunakan Redis, buka
https://servbay-cakephp-test.local/cache-redis
. Sama, pertama kali “Cache miss”, selanjutnya “Cache hit”.
- Jika menggunakan Memcached, buka
Ini menandakan proyek CakePHP Anda sudah berhasil terhubung dan menggunakan layanan cache yang disediakan oleh ServBay.
Hal Penting yang Perlu Diperhatikan
- Kredensial Database: Username & password default (
root
/password
) hanya untuk pengembangan lokal. Untuk produksi, wajib gunakan kredensial yang lebih aman. - Directory Root Website: Pastikan “Document Root” website di ServBay diarahkan ke folder
webroot
dalam proyek CakePHP Anda, bukan direktori utamanya (best practice CakePHP). - Kompatibilitas Versi PHP: Pilih versi PHP di ServBay yang kompatibel dengan versi CakePHP yang Anda gunakan. Cek dokumentasi resmi CakePHP untuk requirements-nya.
- Port ServBay: Jika port default ServBay (misal 80 dan 443) sedang dipakai aplikasi lain, ubah port di pengaturan ServBay, serta sesuaikan di hosts file atau akses dengan menyertakan port.
FAQ (Pertanyaan yang Sering Diajukan)
Q: Mengapa akses ke
servbay-cakephp-test.local
muncul "halaman tidak ditemukan"?- A: Periksa apakah "Document Root" pada website ServBay mengarah ke
/Applications/ServBay/www/servbay-cakephp-app/webroot
. - Pastikan server web (Caddy/Nginx) di ServBay sudah berjalan.
- Pastikan
servbay-cakephp-test.local
di-resolve ke127.0.0.1
di sistem hosts file Anda (ServBay biasanya menangani ini otomatis). - Pastikan file
.htaccess
pada CakePHP (webroot/.htaccess
) atau konfigurasi server web Anda benar.
- A: Periksa apakah "Document Root" pada website ServBay mengarah ke
Q: Database gagal terhubung?
- A: Pastikan layanan database (MySQL/PostgreSQL) berjalan.
- Cek detail koneksi di
config/app_local.php
(host, port, username, password, database) dan sesuaikan dengan pengaturan ServBay. - Pastikan database
servbay_cakephp_app
sudah dibuat di server database.
Q: Kenapa perintah Composer (
bin/cake
) tidak bisa dijalankan?- A: Pastikan Terminal berada pada root proyek CakePHP (
/Applications/ServBay/www/servbay-cakephp-app
). - Pastikan PHP dan Composer di ServBay sudah menyala.
- Cek apakah perintah
php
sudah bisa diakses dari terminal (biasanya ServBay otomatis menambah PHP ke PATH). Jika tidak, bisa gunakan terminal bawaan ServBay atau set PATH manual.
- A: Pastikan Terminal berada pada root proyek CakePHP (
Kesimpulan
Dengan ServBay, Anda dapat membangun lingkungan pengembangan lokal untuk proyek CakePHP di macOS secara efisien. Paket PHP, Composer, server web, dan database yang sudah terintegrasi sangat memudahkan setup. Panduan ini menjelaskan langkah demi langkah mulai dari pembuatan proyek, konfigurasi dasar, setup server web, hingga integrasi database dan layanan cache, sehingga Anda bisa langsung fokus coding tanpa pusing soal environment. Nikmati kemudahan ServBay untuk mempercepat perjalanan pengembangan aplikasi CakePHP Anda!