Membuat dan Menjalankan Proyek ThinkPHP 8 di ServBay
Dokumen ini akan membimbing Anda langkah demi langkah dalam menggunakan ServBay—lingkungan pengembangan Web lokal yang tangguh—untuk membuat, mengonfigurasi, dan menjalankan proyek PHP berbasis framework ThinkPHP 8. ServBay menyajikan environment PHP yang sudah siap digunakan, web server (Caddy atau Nginx), dan beragam layanan database bawaan yang menyederhanakan proses setup ThinkPHP secara signifikan.
Apa Itu ThinkPHP?
ThinkPHP adalah framework PHP open-source yang berasal dari Tiongkok dengan pendekatan OOP yang sederhana dan cepat. Framework ini mendukung prinsip pengembangan yang efisien dan mudah digunakan, disertai kumpulan fitur modern seperti ORM handal, routing fleksibel, template engine built-in, cache, dan masih banyak lagi. Dengan komunitas yang aktif dan dokumentasi luas, ThinkPHP menjadi pilihan utama pengembangan PHP skala kecil hingga enterprise di Tiongkok.
Fitur Utama & Keunggulan ThinkPHP
- Ringkas & Efisien: Desain minimalis dengan struktur kode yang jelas, sehingga mudah dipahami dan dikelola. Mempercepat proses pengembangan.
- Fitur Lengkap: Komponen penting pengembangan web seperti arsitektur MVC, ORM, template engine, cache, manajemen session, autentikasi, form token, semuanya sudah terintegrasi.
- ORM yang Kuat: Mendukung object-relational mapping yang mudah digunakan, mempersingkat operasi database.
- Routing Fleksibel: Mendukung berbagai metode definisi routing yang memenuhi kebutuhan struktur URL modern.
- Ekosistem Kaya: Banyak ekstensi dan plug-in tersedia serta didukung komunitas developer yang sangat aktif.
- Terus Berkembang: Rilis framework dilakukan secara berkala sesuai perkembangan PHP dan tren teknologi web terbaru.
ThinkPHP cocok digunakan untuk pengembangan website dari skala kecil hingga enterprise.
Menyiapkan Proyek ThinkPHP 8 dengan ServBay
ServBay memberikan environment ideal untuk pengembangan ThinkPHP 8 dengan:
- Paket PHP multiversi lengkap beserta ekstensi utama.
- Web server bawaan (Caddy atau Nginx) yang mudah dikonfigurasi.
- Integrasi database seperti MySQL, PostgreSQL, MongoDB, Redis, dan Memcached.
- Composer dependency manager sudah terinstal di dalamnya.
Pada panduan ini Anda akan memanfaatkan semua keunggulan tersebut untuk setup proyek ThinkPHP 8 secara cepat.
Prasyarat
Pastikan hal berikut sebelum memulai:
- Anda telah mengunduh dan menginstal ServBay pada macOS.
- ServBay sudah berjalan, paket PHP yang dibutuhkan (ThinkPHP 8 memerlukan PHP 8.0+) dan layanan database (seperti MySQL, PostgreSQL, Redis, Memcached) sudah aktif. Anda dapat cek dan mengaktifkan layanan lewat tab "Paket" pada panel kontrol ServBay.
Membuat Proyek ThinkPHP
Direkomendasikan menyimpan seluruh file website Anda secara terpusat pada direktori /Applications/ServBay/www
agar manajemen lebih mudah dengan ServBay.
Pastikan Composer Sudah Terinstal
Composer telah terintegrasi dengan instalasi ServBay, jadi Anda biasanya tidak perlu instalasi terpisah. Anda dapat memverifikasinya lewat terminal ServBay dengan mengetik
composer --version
.Membuat Proyek ThinkPHP Dengan Composer
Buka Terminal macOS dan jalankan perintah berikut untuk membuat proyek baru ThinkPHP 8 di root direktori website ServBay:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2Folder baru bernama
servbay-thinkphp-app
akan dibuat pada/Applications/ServBay/www
, berisikan file inti dan dependensi ThinkPHP 8.Masuk ke Direktori Proyek
Setelah proses selesai, pindah ke dalam folder proyek Anda:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
Inisialisasi Konfigurasi Proyek
Setelah membuat proyek, Anda perlu menyiapkan beberapa konfigurasi utama.
Atur Koneksi Database
Konfigurasi database ThinkPHP biasanya terdapat pada file
config/database.php
. Sesuaikan pengaturannya sesuai layanan database yang Anda aktifkan di ServBay.Berikut contoh pengaturan untuk layanan MySQL bawaan ServBay:
php<?php // config/database.php return [ // Konfigurasi koneksi database default 'default' => env('database.driver', 'mysql'), // Daftar koneksi database yang tersedia 'connections' => [ 'mysql' => [ // Jenis database 'type' => 'mysql', // Alamat server database 'hostname' => env('database.hostname', '127.0.0.1'), // Nama database 'database' => env('database.database', 'servbay_thinkphp_app'), // Disarankan membuat DB terpisah untuk proyek Anda // Username 'username' => env('database.username', 'root'), // Password 'password' => env('database.password', 'password'), // Password default ServBay, gunakan untuk local development saja! // Port 'hostport' => env('database.hostport', '3306'), // ... konfigurasi lain ... ], // ... koneksi database lainnya ... ], ];
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
27Catatan Penting:
- Pastikan nilai
database
sudah sesuai dengan nama database yang Anda buat (misal,servbay_thinkphp_app
, dapat dibuat melalui phpMyAdmin atau Adminer milik ServBay). - Password default user
root
di ServBay adalahpassword
. Jangan gunakan password ini untuk produksi! Selalu gunakan password kuat dan user minim hak akses di environment produksi. - Jika Anda mengatur variabel lingkungan lewat
.env
, pastikan setting di file.env
menimpa nilai default padaconfig/database.php
sesuai kebutuhan.
- Pastikan nilai
Mengkonfigurasi Web Server
File entry-point ThinkPHP adalah public/index.php
dan framework ini membutuhkan rules URL Rewrite khusus agar routing berjalan normal. Karena core routing ThinkPHP berbeda dengan direct static file, gunakan preset aturan rewrite bawaan ServBay.
Pada menu pengaturan website, pilih rule rewrite ThinkPHP
kemudian klik simpan.
Panduan lebih detail tentang setup website bisa Anda temukan di Menambahkan Website Pertama.
Menambahkan Kode Contoh
Untuk menguji keberhasilan konfigurasi serta fitur routing dasar ThinkPHP, tambahkan route dan controller sederhana berikut.
Edit file /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
, lalu masukkan kode berikut untuk mendefinisikan routing GET dasar:
php
<?php
// route/app.php
use think\facade\Route;
// Mendefinisikan route servbay, akses ke /servbay akan menjalankan fungsi anonimus ini
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... route lainnya ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Akses Website
Setelah semua langkah di atas, buka browser dan kunjungi domain lokal beserta route contoh berikut:
https://thinkphp.servbay.demo/servbay
Jika semua pengaturan benar, Anda akan melihat output Hello ServBay!
di browser—artinya proyek ThinkPHP 8 Anda telah berjalan normal melalui ServBay, dengan konfigurasi web server dan PHP-FPM telah aktif.
Contoh Database NoSQL
ServBay memiliki beberapa layanan database NoSQL seperti Memcached dan Redis. ThinkPHP menyediakan cache abstraction layer sehingga mudah sekali memakai layanan ini sebagai cache driver.
Contoh Memcached
Pastikan Ekstensi Memcached Terinstall
Ekstensi Memcached sudah include dalam paket PHP ServBay. Pastikan layanan Memcached sudah aktif via tab "Paket" pada panel ServBay.
Konfigurasi Cache Memcached
Edit file
config/cache.php
agar ThinkPHP memakai Memcached sebagai driver utama:php<?php // config/cache.php return [ // Driver cache default 'default' => env('cache.driver', 'memcached'), // Konfigurasi koneksi cache 'stores' => [ 'memcached' => [ // Jenis cache 'type' => 'memcached', // Daftar server 'host' => '127.0.0.1', // Alamat default Memcached ServBay 'port' => 11211, // Port default Memcached ServBay 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... konfigurasi cache lainnya ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Menggunakan Cache Memcached Dalam Kode
Pada controller/route callback Anda, gunakan Facade
Cache
milik ThinkPHP untuk operasi cache Memcached:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // Set cache dengan lifetime 600 detik Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // Ambil cache $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13Buka
https://thinkphp.servbay.demo/memcached-example
untuk uji coba.
Contoh Redis
Pastikan Ekstensi Redis Terinstall
Extension Redis sudah langsung tersedia pada paket PHP ServBay. Pastikan layanan Redis sudah aktif via tab "Paket" pada panel ServBay.
Konfigurasi Cache Redis
Edit file
config/cache.php
agar ThinkPHP memakai Redis sebagai cache driver:php<?php // config/cache.php return [ // Driver cache default 'default' => env('cache.driver', 'redis'), // Konfigurasi koneksi cache 'stores' => [ 'redis' => [ // Jenis cache 'type' => 'redis', // Alamat server 'host' => env('cache.host', '127.0.0.1'), // Alamat default Redis ServBay // Port 'port' => env('cache.port', 6379), // Port default Redis ServBay // Password (Redis ServBay default tanpa password) 'password' => env('cache.password', ''), // Redis ServBay tidak pakai password secara default 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... konfigurasi cache lainnya ... ], ];
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
27Catatan: Redis bawaan ServBay default tidak pakai password. Jika Anda menambah password secara manual, harap update field
password
sesuai.Menggunakan Cache Redis Dalam Kode
Pada controller/route callback Anda, gunakan Facade
Cache
ThinkPHP untuk operasi Redis:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Simpan cache, berlaku permanen (bisa tambahkan argumen ketiga untuk limit waktu) Cache::set('my_redis_key', 'Hello from Redis!'); // Ambil cache $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13Kunjungi
https://thinkphp.servbay.demo/redis-example
untuk pengujian.
Contoh Database Relasional
ServBay sudah siap digunakan bersama MySQL dan PostgreSQL. ORM ThinkPHP memudahkan interaksi dengan berbagai RDBMS ini secara seamless.
Penggunaan Tool Migrasi Database ThinkPHP
Pengelolaan perubahan struktur database pada ThinkPHP biasa dilakukan menggunakan tool migrasi, sangat membantu kolaborasi tim dan versioning DB.
Install Tool Migrasi Database
Install extension database migration ThinkPHP menggunakan Composer di root proyek:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Buat File Migrasi Baru
Gunakan CLI ThinkPHP untuk generate file migrasi, misal untuk tabel
users
:bashphp think migrate:create CreateUserTable
1File PHP baru akan muncul di folder
database/migrations
, dengan pola nama timestamp (misal:20231027100000_create_user_table.php
).Edit File Migrasi
Edit file tersebut dan modifikasi method
up()
untuk mendefinisikan struktur tabelusers
:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // Membuat tabel new via method createTable $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Nama Pengguna']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'Alamat Email']) ->addIndex(['email'], ['unique' => true]) // Unik index pada email ->addTimestamps() // Kolom created_at & updated_at ->create(); // Eksekusi pembuatan tabel } // Opsi: jika tidak memakai change(), Anda bisa definisikan method up()/down() terpisah /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Nama Pengguna']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'Alamat Email']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $this->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
62Jalankan Migrasi Database
Pastikan Anda berada di root proyek lewat terminal ServBay, lalu jalankan migrate:
bashphp think migrate:run
1Jika sukses, Anda akan menemukan tabel
users
pada database proyek Anda.
Contoh MySQL
Anggap MySQL sudah aktif di ServBay dan telah di-setting di config/database.php
sesuai instruksi sebelumnya.
Pastikan Koneksi MySQL Sudah Benar
Cek kembali konfigurasi di bagian "Inisialisasi Konfigurasi Proyek" dan pastikan koneksi
mysql
seusai.Menulis Data User ke Database via Kode
Gunakan ThinkPHP Facade
Db
atau model ORM untuk insert data. Berikut contoh memakai Facade:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => 'demo@servbay.demo', // Email contoh dengan branding 'created_at' => date('Y-m-d H:i:s'), // Timestamp manual jika addTimestamps() belum otomatis 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Coba akses
https://thinkphp.servbay.demo/mysql-add-user
.Membaca Data User dari Database via Kode
Masih dengan Facade atau ORM, lakukan query data:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // Ambil seluruh data user return json($users); // Return hasil dalam format JSON });
1
2
3
4
5
6
7
8Kunjungi
https://thinkphp.servbay.demo/mysql-users
untuk cek data tabelusers
.
Contoh PostgreSQL
Pastikan PostgreSQL Service dan konfigurasi di config/database.php
sudah terisi data koneksi yang benar.
Konfigurasi Koneksi PostgreSQL
Pada file
config/database.php
, pastikan ada pengaturan berikut (atau sesuaikan sesuai environment Anda):php<?php // config/database.php (sebagian) return [ // ... setting lain ... 'connections' => [ // ... konfigurasi MySQL ... 'pgsql' => [ // Jenis database 'type' => 'pgsql', // Alamat server database 'hostname' => env('database.hostname', '127.0.0.1'), // Nama database 'database' => env('database.database', 'servbay_thinkphp_app'), // Disarankan buat DB khusus setiap proyek // Username 'username' => env('database.username', 'root'), // Password 'password' => env('database.password', 'password'), // Password default ServBay, gunakan hanya saat lokal! // Port 'hostport' => env('database.hostport', '5432'), // Port default PostgreSQL // ... setting lain ... ], // ... koneksi lain ... ], ];
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
27Catatan Penting:
- Seperti MySQL, buatlah database PostgreSQL khusus untuk setiap proyek dan update konfigurasinya.
- Password default user
root
ServBay untuk PostgreSQL jugapassword
. Hanya gunakan untuk pengembangan lokal.
Menulis Data User ke PostgreSQL via Kode
Gunakan Facade
Db
atau ORM, pastikan connect mengarah kepgsql
:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // Menggunakan koneksi pgsql 'name' => 'ServBay PgSQL User', 'email' => 'pgsql-demo@servbay.demo', // Email contoh dengan branding // Timestamp, silakan edit sesuai kebutuhan migrasi/db Anda 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Tes dengan membuka
https://thinkphp.servbay.demo/pgsql-add-user
.Membaca Data User dari PostgreSQL via Kode
Query data dengan connect ke
pgsql
:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // Mengambil data user dari pgsql return json($users); // Return data dalam format JSON });
1
2
3
4
5
6
7
8Cek data dengan membuka
https://thinkphp.servbay.demo/pgsql-users
.
Kesimpulan
Dengan mengikuti tutorial di atas, Anda telah berhasil membuat, mengonfigurasi, dan menjalankan proyek ThinkPHP 8 di lingkungan lokal ServBay. Anda sudah memahami cara membuat proyek menggunakan Composer bawaan, setting server web Caddy beserta rule routing ThinkPHP, serta cara terhubung ke MySQL, PostgreSQL, Memcached, dan Redis menggunakan environment ServBay.
ServBay membuat setup lingkungan pengembangan framework PHP seperti ThinkPHP menjadi sangat sederhana sehingga Anda bisa langsung fokus ke pengembangan aplikasi tanpa repot urusan environment. Manfaatkan berbagai software bawaan yang disediakan ServBay untuk mendukung seluruh tahapan pengembangan ThinkPHP Anda.