Membuat dan Menjalankan Proyek Slim di ServBay
Dokumen ini akan memandu Anda dalam membuat, mengonfigurasi, dan menjalankan proyek PHP menggunakan Slim Framework di ServBay — lingkungan pengembangan web lokal yang canggih. ServBay menyediakan paket PHP, server web (Caddy/Nginx/Apache), serta berbagai database terintegrasi, menjadikannya pilihan ideal untuk pengembangan proyek berbasis Slim.
Apa itu Slim?
Slim adalah microframework PHP yang ringan dan mudah digunakan untuk membangun aplikasi web atau API yang sederhana tapi powerful. Slim menyediakan core routing, penanganan request dan response yang efisien, cocok untuk proyek yang butuh pengembangan cepat atau sebagai dasar membangun aplikasi lebih kompleks.
Fitur Utama & Keunggulan Slim
- Ringan: Slim memiliki kode inti yang sangat kecil, penggunaan sumber daya rendah, dan startup yang cepat—ideal untuk aplikasi kecil hingga menengah atau microservices.
- Fleksibel: Arsitektur Slim mendukung integrasi dengan berbagai library pihak ketiga (misal: template engine, ORM, library autentikasi), sehingga Anda bebas memilih tool yang paling sesuai kebutuhan proyek Anda.
- Mudah digunakan: API dan dokumentasi yang sederhana membuat developer mudah memahami konsep dan langsung mulai coding dengan Slim.
- Routing canggih: Mendukung aneka HTTP method (GET, POST, PUT, DELETE, dst) serta konfigurasi routing lanjutan seperti grup, middleware, dan parameter.
- Support Middleware: Layer middleware memungkinkan eksekusi berbagai tugas (autentikasi, logging, CORS, dll) sebelum atau sesudah request masuk ke logika aplikasi.
Slim sangat cocok untuk membangun RESTful API, prototipe cepat, atau menangani fitur khusus yang terisolasi.
Membuat & Menjalankan Proyek Slim dengan ServBay
Panduan berikut memanfaatkan environment PHP yang sudah terkonfigurasi di ServBay beserta fitur Website untuk menyetel server web. Dengan konfigurasi sederhana, proyek Slim Anda siap diakses.
Prasyarat
Sebelum mulai, pastikan:
- ServBay telah terinstal & berjalan: Pastikan ServBay terpasang dengan sukses di macOS atau Windows dan aplikasi ServBay sudah berjalan.
- Composer sudah tersedia di ServBay: Composer sudah terintegrasi dalam ServBay, Anda tidak perlu install terpisah.
Membuat Proyek Slim
ServBay menyarankan Anda menempatkan semua proyek website pada direktori berikut agar mudah dikelola:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Masuk ke direktori root website ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Buat folder proyek: Buat direktori baru untuk proyek Slim Anda.
bashmkdir servbay-slim-app
1Masuk ke direktori proyek:
bashcd servbay-slim-app
1Install Slim via Composer: Jalankan Composer untuk install Slim dan library PSR-7.
bashcomposer require slim/slim "^4.0" slim/psr7 -W
1Perintah ini akan mengunduh Slim Framework dan library
slim/psr7
ke foldervendor
proyek Anda, sekaligus membuat filecomposer.json
dancomposer.lock
.
Inisialisasi Aplikasi Slim
- Buat file entry point: Slim umumnya menggunakan satu file utama (misal
public/index.php
) untuk menangani semua request. Di root proyek, buat direktoripublic
dan fileindex.php
di dalamnya.bashmkdir public touch public/index.php
1
2 - Edit file entry point: Buka
public/index.php
dan tambahkan kode dasar aplikasi Slim berikut:phpKode di atas membuat aplikasi Slim paling sederhana, dengan satu route yang menangani request GET ke URL<?php // Memuat file autoload Composer require __DIR__ . '/../vendor/autoload.php'; // Import interface PSR-7 yang dibutuhkan & factory Slim use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; // Membuat instance aplikasi Slim $app = AppFactory::create(); // Tambahkan routing dasar: tangani GET ke path root '/' $app->get('/', function (Request $request, Response $response, $args) { // Menulis konten ke response body $response->getBody()->write("Hello ServBay!"); // Mengembalikan response object return $response; }); // Jalankan aplikasi Slim $app->run();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/
dan mengembalikan teks "Hello ServBay!".
Konfigurasi Website di ServBay
Agar proyek Slim Anda bisa diakses via browser, lakukan konfigurasi Website (di versi lama disebut "Host") di ServBay.
- Buka UI aplikasi ServBay.
- Masuk ke modul Websites.
- Klik tambah Website baru.
- Isi konfigurasi berdasarkan data proyek Anda:
Nama (Name):
My First Slim Dev Site
(atau nama lain sesuai keinginan Anda)Domain:
servbay-slim-test.local
(disarankan gunakan.local
atau.test
untuk pengembangan lokal)Tipe Website:
PHP
Versi PHP: Pilih versi PHP yang Anda butuhkan, misal
8.3
.Root Directory: Klik browse, pilih folder
public
proyek Anda:- macOS:
/Applications/ServBay/www/servbay-slim-app/public
- Windows:
C:\ServBay\www\servbay-slim-app\public
Slim menggunakan
public/index.php
sebagai entry point, sehingga web server harus diarahkan ke folder ini.- macOS:
- Simpan konfigurasi website. ServBay akan secara otomatis mengupdate dan mengaktifkan setting web server.
Untuk langkah detail, cek Menambah Website Pertama.
Mengakses Website Slim Anda
Setelah konfigurasi selesai, buka browser Anda dan akses domain yang sudah dibuat: https://servbay-slim-test.local
.
Jika semua berjalan lancar, halaman akan menampilkan teks Hello ServBay!
, menandakan proyek Slim Anda sudah berjalan melalui web server ServBay.
Contoh Integrasi Database
Slim tidak menyediakan lapisan abstraksi database, tapi dapat dengan mudah diintegrasikan dengan library database PHP apapun. Di sini, kita gunakan Eloquent ORM dari Laravel (illuminate/database
) sebagai contoh untuk menghubungkan MySQL, PostgreSQL, serta contoh Memcached dan Redis.
Prasyarat: Membuat Database & Melakukan Migrasi
Sebelum integrasi database, Anda perlu membuat database di ServBay dan skema tabel untuk aplikasi Anda.
- Buat database:
- Buka UI ServBay, masuk ke software package database yang Anda gunakan (Misal MySQL atau PostgreSQL).
- Gunakan tool seperti phpMyAdmin (untuk MySQL/MariaDB), pgAdmin (untuk PostgreSQL), atau client command line untuk membuat database baru, contoh:
servbay_slim_app
. - Password default root database biasanya
password
, dapat dicek atau diubah di setting ServBay.
- Install & Konfigurasi Phinx (migration tool): Phinx adalah tool migrasi database PHP untuk versioning struktur database.
- Install Phinx di root proyek Slim Anda:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require robmorgan/phinx
1 - macOS:
- Inisialisasi konfigurasi Phinx:bashAkan membuat file
vendor/bin/phinx init
1phinx.yml
di root proyek. Edit file tersebut untuk konfigurasi koneksi database Anda, misal:yamlpaths: migrations: '%%PHINX_CONFIG_DIR%%/db/migrations' seeds: '%%PHINX_CONFIG_DIR%%/db/seeds' environments: default_migration_table: phinxlog default_environment: development development: adapter: mysql # atau pgsql host: 127.0.0.1 name: servbay_slim_app user: root pass: password port: 3306 # MySQL, PostgreSQL default 5432 charset: utf8mb4 collation: utf8mb4_unicode_ci version_order: creation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- Install Phinx di root proyek Slim Anda:
- Buat file migrasi: Gunakan perintah Phinx untuk membuat file migrasi baru.bashFile PHP baru akan dibuat di
vendor/bin/phinx create CreateUsersTable
1db/migrations
. Edit methodchange()
untuk mendefinisikan tabelusers
:php<?php declare(strict_types=1); use Phinx\Migration\AbstractMigration; final class CreateUsersTable extends AbstractMigration { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method * * Remember to call "create()" or "update()" and NOT "save()" when working * with the Table class. */ public function change(): void { $table = $this->table('users'); $table->addColumn('name', 'string') ->addColumn('email', 'string', ['unique' => true]) ->addTimestamps() // Membuat kolom created_at & updated_at ->create(); } }
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 - Jalankan migrasi: Di root proyek, eksekusi perintah migrasi untuk membuat tabel
users
.bashPenting: Pastikan sudah membuat database dan migrasi sebelum menjalankan contoh kode database berikut.vendor/bin/phinx migrate
1
Menggunakan Komponen illuminate/database
Kita gunakan component database Laravel (illuminate/database
) sebagai ORM/query builder.
Install illuminate/database: Di root proyek, jalankan:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require illuminate/database
1- macOS:
Inisialisasi koneksi database di
public/index.php
: Setelahrequire __DIR__ . '/../vendor/autoload.php';
, sebelum$app = AppFactory::create();
, tambahkan konfigurasi berikut.php// ... require dan use lainnya ... use Illuminate\Database\Capsule\Manager as Capsule; // Import Capsule Manager // Inisialisasi Eloquent ORM $capsule = new Capsule; // Tambahkan konfigurasi koneksi database (ubah sesuai database Anda) $capsule->addConnection([ 'driver' => 'mysql', // atau 'pgsql' 'host' => '127.0.0.1', 'database' => 'servbay_slim_app', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', // PostgreSQL: tambahkan parameter 'schema' // 'schema' => 'public', ]); // Set sebagai global $capsule->setAsGlobal(); // Jalankan Eloquent $capsule->bootEloquent(); // ... lanjutkan dengan pembuatan $app ...
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
Contoh MySQL
Jika MySQL package sudah aktif di ServBay, database servbay_slim_app
sudah dibuat dan migrasi tabel users sukses, tambahkan route berikut di public/index.php
sebelum $app->run();
:
php
// ... kode inisialisasi & route '/' ...
use Illuminate\Database\Capsule\Manager as Capsule; // Pastikan sudah di-import
// Route tambah pengguna
$app->get('/mysql-add-user', function (Request $request, Response $response, $args) {
try {
Capsule::table('users')->insert([
'name' => 'ServBay Demo User',
'email' => 'servbay-demo-' . time() . '@servbay.test', // Membuat email unik pakai time()
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$response->getBody()->write('User added to MySQL');
} catch (\Exception $e) {
$response->getBody()->write('Error adding user: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// Route get data pengguna
$app->get('/mysql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson());
$response = $response->withHeader('Content-Type', 'application/json');
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
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
Akses:
- Kunjungi
https://servbay-slim-test.local/mysql-add-user
untuk menambah user ke tabelusers
. - Kunjungi
https://servbay-slim-test.local/mysql-get-users
untuk mengambil data user dalam format JSON.
Contoh PostgreSQL
Jika PostgreSQL package di ServBay sudah aktif, database dan tabel sudah dibuat, ubah konfigurasi koneksi:
php
$capsule->addConnection([
'driver' => 'pgsql',
'host' => '127.0.0.1',
'database' => 'servbay_slim_app',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
]);
// ... Eloquent inisialisasi tetap sama ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Tambahkan route berikut sebelum $app->run();
:
php
// ... route dasar dan database sebelumnya ...
use Illuminate\Database\Capsule\Manager as Capsule; // Pastikan sudah di-import
// Route tambah pengguna
$app->get('/pgsql-add-user', function (Request $request, Response $response, $args) {
try {
Capsule::table('users')->insert([
'name' => 'ServBay PG Demo User',
'email' => 'servbay-pg-demo-' . time() . '@servbay.test',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$response->getBody()->write('User added to PostgreSQL');
} catch (\Exception $e) {
$response->getBody()->write('Error adding user: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// Route get data pengguna
$app->get('/pgsql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson());
$response = $response->withHeader('Content-Type', 'application/json');
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
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
Akses:
- Kunjungi
https://servbay-slim-test.local/pgsql-add-user
untuk menambah user di database PostgreSQL. - Kunjungi
https://servbay-slim-test.local/pgsql-get-users
untuk mengambil semua user sebagai JSON dari PostgreSQL.
Contoh Memcached
ServBay sudah menyertakan Memcached package dan ekstensi PHP ext-memcached
. Anda hanya perlu install library PHP client, misal: memcached/memcached
.
Install library Memcached: Di root proyek, install dengan Composer:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require memcached/memcached
1- macOS:
Tambahkan routing Memcached di
public/index.php
:php// ... kode inisialisasi dan routing database ... // Route Memcached $app->get('/memcached-example', function (Request $request, Response $response, $args) { // Buat instance client Memcached $memcached = new Memcached(); // Tambahkan server Memcached (ServBay default di 127.0.0.1:11211) $memcached->addServer('127.0.0.1', 11211); $cacheKey = 'my_servbay_cache_key'; // Coba ambil data dari cache $cachedData = $memcached->get($cacheKey); if ($cachedData === false) { // Jika cache kosong, generate data lalu simpan ke cache $cachedData = 'Hello Memcached from ServBay! This was not cached.'; // Simpan ke cache, ttl 60 detik $memcached->set($cacheKey, $cachedData, 60); $response->getBody()->write($cachedData); } else { // Jika cache ada, langsung tampilkan $response->getBody()->write('Hello Memcached from ServBay! This was served from cache.'); } return $response; }); // ... $app->run();
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
Akses: Kunjungi https://servbay-slim-test.local/memcached-example
. Akses pertama: "This was not cached", selanjutnya (sebelum expire): "This was served from cache".
Contoh Redis
ServBay menyediakan Redis package dan ekstensi PHP ext-redis
. Anda cukup install library PHP client, seperti predis/predis
.
Install Predis: Di root proyek, install dengan Composer:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require predis/predis
1- macOS:
Tambahkan routing Redis di
public/index.php
:php// ... kode inisialisasi dan routing database ... // ... routing Memcached bila ada ... use Predis\Client as RedisClient; // Import client Predis // Route Redis $app->get('/redis-example', function (Request $request, Response $response, $args) { try { // Buat instance client Redis (ServBay default di 127.0.0.1:6379) $redis = new RedisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_servbay_redis_cache_key'; // Coba ambil data dari cache $cachedData = $redis->get($cacheKey); if ($cachedData === null) { // Jika cache kosong, generate data lalu simpan $cachedData = 'Hello Redis from ServBay! This was not cached.'; // Simpan ke Redis, expired 60 detik $redis->setex($cacheKey, 60, $cachedData); $response->getBody()->write($cachedData); } else { // Jika cache ada, langsung tampilkan $response->getBody()->write('Hello Redis from ServBay! This was served from cache.'); } } catch (\Exception $e) { // Handle error koneksi/operasi $response->getBody()->write('Error connecting to Redis or performing operation: ' . $e->getMessage()); $response = $response->withStatus(500); } return $response; }); // ... $app->run();
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
Akses: Kunjungi https://servbay-slim-test.local/redis-example
. Pertama kali muncul "This was not cached", selanjutnya (sebelum expired) akan tampil "This was served from cache".
Kesimpulan
Melalui langkah-langkah di atas, Anda telah berhasil membuat proyek Slim Framework di lingkungan ServBay, mengatur website agar bisa diakses, serta mengintegrasikan paket database dan cache seperti MySQL, PostgreSQL, Memcached, dan Redis. ServBay sangat praktis untuk setup dan manajemen environment lokal, sehingga Anda dapat lebih fokus mengembangkan aplikasi Slim sesuai kebutuhan!