Membuat dan Menjalankan Proyek Symfony
ServBay adalah lingkungan pengembangan web lokal yang dirancang khusus untuk macOS dan Windows. Platform ini mengintegrasikan berbagai runtime seperti PHP, Node.js, Python, Go, Java, serta database seperti MySQL, PostgreSQL, MongoDB, Redis, dan mendukung server web Apache maupun Caddy. Panduan berikut akan menjelaskan secara rinci cara cepat membangun dan menjalankan proyek Symfony menggunakan ServBay di macOS dan Windows.
Apa Itu Symfony?
Symfony adalah framework web PHP open source yang dikembangkan oleh SensioLabs. Tujuannya adalah memberi developer satu set alat yang efisien, fleksibel, dan kaya fitur untuk membangun aplikasi web modern dan API. Symfony menerapkan praktik terbaik web standar dan menyediakan beragam komponen seperti routing, template engine (Twig), pemrosesan form, sistem otentikasi, dependency injection, dan masih banyak lagi, sehingga memudahkan menyelesaikan tugas-tugas pengembangan web umum.
Fitur dan Kelebihan Utama Symfony
- Desain Modular: Inti Symfony adalah library komponen yang dapat digunakan ulang. Developer dapat memilih komponen sesuai kebutuhan, membangun aplikasi dari ringan hingga kompleks.
- Performa Tinggi: Berkat arsitektur yang optimal, mekanisme caching yang efisien, dan dukungan fitur PHP terbaru, Symfony memberikan performa sangat baik.
- Komunitas yang Besar: Didukung komunitas developer yang aktif, tersedia banyak bundle (plugin) pihak ketiga dan dokumentasi lengkap, sehingga mudah menemukan solusi saat ada masalah.
- Fleksibel: Mudah diintegrasikan dengan berbagai library dan ekstensi pihak ketiga, cocok untuk proyek skala kecil hingga besar.
- Stabil dan Mudah Dipelihara: Mengikuti standarisasi penulisan kode dan desain pattern yang baik, sehingga aplikasi yang dibuat mudah diuji, dirawat, dan dikembangkan.
Symfony sangat cocok digunakan untuk membangun aplikasi web dari skala API kecil hingga sistem enterprise yang kompleks.
Membuat dan Menjalankan Proyek Symfony dengan ServBay
ServBay menyediakan dukungan lingkungan lengkap untuk menjalankan proyek Symfony, meliputi versi PHP yang sesuai, Composer, server web, serta berbagai layanan database dan cache. Bagian ini akan memandu Anda memanfaatkan fitur ServBay untuk membuat dan mengatur proyek Symfony baru.
Persiapan Awal
Sebelum memulai, pastikan Anda telah melakukan hal berikut:
- Instal ServBay: Pastikan ServBay sudah terpasang dan berjalan di macOS Anda. Jika belum, baca Panduan Instalasi ServBay.
- ServBay Berjalan Normal: Pastikan layanan utama ServBay (misal Caddy atau Apache, juga database yang diperlukan) sudah aktif.
- Pemahaman Dasar: Anda sudah memahami dasar tentang PHP, Composer, dan konsep Symfony.
Membuat Proyek Symfony
ServBay merekomendasikan agar semua proyek web Anda ditempatkan di direktori /Applications/ServBay/www untuk memudahkan pengelolaan dan deteksi proyek oleh ServBay.
Pastikan Composer Tersedia
Composer telah terinstal secara otomatis dengan ServBay, serta sudah dikonfigurasikan dalam path environment. Anda tidak perlu instal Composer secara terpisah. Cek ketersediaannya lewat terminal dengan perintah
composer --version.Membuat Folder Proyek
Buat folder baru di direktori utama yang direkomendasikan untuk menyimpan proyek Symfony Anda:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app1
2Membuat Proyek Symfony dengan Composer
Masuk ke folder proyek yang baru dibuat, lalu gunakan Composer untuk membuat skeleton proyek Symfony berbasis
website-skeleton. Skeleton ini sudah memuat dependensi umum untuk membangun aplikasi web.bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .1
2Perintah di atas akan mendownload file inti dan dependensi Symfony ke dalam folder proyek.
Konfigurasi Awal
Konfigurasi utama pada proyek Symfony biasanya dikelola melalui environment variable yang disimpan di file .env pada root proyek.
Setel Environment Variable (
.env)Buka file
.envdi root folder proyek. File ini memuat konfigurasi aplikasi seperti info koneksi database dan secret key. Ubah atau tambahkan konfigurasi sesuai kebutuhan Anda.Pastikan konfigurasi berikut sudah benar atau sesuaikan dengan lingkungan ServBay Anda:
dotenv# Contoh file .env APP_ENV=dev # Lingkungan pengembangan APP_SECRET=your_secret_key # Ganti dengan string acak unik, digunakan untuk keamanan # Info koneksi database (misal menggunakan MySQL, detail di bawah) # DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"1
2
3
4
5
6
7
8Pastikan Anda mengganti
your_secret_keydengan string acak yang aman. Untuk koneksi database, user default ServBay biasanyarootdengan passwordpassword(ingat, sangat disarankan ganti kredensi default untuk produksi). Misal nama database-nya:servbay_symfony_app.
Konfigurasi Server Web (Situs ServBay)
Agar bisa diakses melalui browser, Anda perlu membuka panel kontrol ServBay dan menggunakan fitur "Situs" untuk menambahkan virtual host lokal. Directory root untuk proyek Symfony adalah folder public/ pada proyek.
Buka panel kontrol ServBay, navigasikan ke pengaturan “Situs” (atau “Host” pada versi lama), lalu tambahkan situs baru:
- Nama: Pilih nama yang mudah dikenali misalnya
My Symfony Dev Site. - Domain: Pakai domain lokal seperti
servbay-symfony-test.local(ServBay otomatis mengarah ke localhost). - Tipe Situs: Pilih
PHP. - Versi PHP: Pilih versi PHP yang kompatibel dengan Symfony, disarankan versi stable terbaru misal
8.3. - Root Folder Situs: Poin terpenting. Pastikan root situs diarahkan ke
public/proyek Symfony, yaitu/Applications/ServBay/www/servbay-symfony-app/public.
Setelah selesai, simpan dan terapkan perubahan. ServBay akan otomatis memperbarui konfigurasi server web. Sebagai default, ServBay menggunakan Caddy atau Apache, dan akan otomatis membuat serta memercayai sertifikat SSL, jadi Anda bisa langsung mengakses via HTTPS.
Untuk langkah detail, cek Menambah Situs Pertama di ServBay.
Menambahkan Kode Contoh Sederhana
Sebagai tes, tambahkan contoh routing dan controller agar saat mengakses root situs, akan muncul pesan sederhana.
Konfigurasi Routing (
config/routes.yaml)Buka file
config/routes.yaml, tambahkan konfigurasi berikut untuk mendefinisikan route/yang diarahkan ke metode controller bernamaindex:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index1
2
3
4Membuat Controller (
src/Controller/DefaultController.php)Dalam folder
src/Controller/, buat file PHP baruDefaultController.phplalu isikan kode berikut:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class DefaultController { /** * @Route("/", name="index") */ public function index(): Response { // Mengembalikan response sederhana return new Response('Hello ServBay and Symfony!'); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Kode di atas membuat controller sederhana bernama
DefaultController, dengan methodindexyang di-route ke path/. Ketika root diakses, akan dikirim response berisi teks "Hello ServBay and Symfony!".
Mengakses Situs
Sekarang, buka browser pilihan Anda dan akses domain yang sudah dikonfigurasi di ServBay: https://servbay-symfony-test.local. Jika semua konfigurasi benar, Anda akan melihat output:
Hello ServBay and Symfony!1
Artinya proyek Symfony Anda sudah berhasil berjalan via server web ServBay. Perlu diingat, ServBay secara default sudah menyiapkan HTTPS, gunakan alamat https:// untuk mengakses.
Contoh Database dan Cache
Symfony umumnya menggunakan Doctrine ORM untuk database relasional dan komponen Symfony Cache untuk cache serta database NoSQL. ServBay menyediakan berbagai layanan database dan ekstensi PHP-nya sehingga mudah digunakan dalam proyek Symfony.
Contoh Database Relasional (Doctrine ORM)
ServBay mendukung MySQL dan PostgreSQL. Berikut langkah konfigurasinya di Symfony.
Konfigurasi Koneksi Database
Di file
.envroot proyek, aktifkan dan sesuaikanDATABASE_URLsesuai database yang dipilih.- Untuk MySQL: User default:
root, password:password, port:3306.dotenv# .env DATABASE_URL="mysql://root:password@127.0.0.1:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"1
2 - Untuk PostgreSQL: User default:
root, password:password, port:5432.dotenv# .env DATABASE_URL="postgresql://root:password@127.0.0.1:5432/servbay_symfony_app?serverVersion=13&charset=utf8"1
2
Pastikan layanan database terkait telah dijalankan lewat panel kontrol ServBay.
- Untuk MySQL: User default:
Membuat Database
Jika database
servbay_symfony_appbelum ada, Anda bisa buat melalui tool manajemen database ServBay, seperti phpMyAdmin atau pgAdmin (akses dari panel kontrol), atau pakai perintah Symfony berikut:bashphp bin/console doctrine:database:create1Buat Entity dan Migration
Biasanya, Entity Doctrine digunakan untuk memetakan tabel. Gunakan Maker Bundle untuk generate Entity dan migration dengan mudah.
- Buat Entity (contoh:
User):bashIsi sesuai prompt, misal tambah fieldphp bin/console make:entity User1name(string) danemail(string, unik). - Buat migration: Generate migration berdasarkan perubahan Entity:bashFile migration .php akan muncul di direktori
php bin/console make:migration1src/Migrationsberisi SQL untuk membuat tabel.
- Buat Entity (contoh:
Jalankan Migration
Terapkan struktur database dengan menjalankan:
bashphp bin/console doctrine:migrations:migrate1Menambahkan Contoh Operasi Database
Ubah
src/Controller/DefaultController.php, tambahkan route dan metode contoh untuk operasi tulis dan baca database via Doctrine. Anda perlu injectEntityManagerInterface.Pastikan konstruktor
DefaultControllermenerimaEntityManagerInterface:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; // Import EntityManagerInterface use App\Entity\User; // Import entity User use Symfony\Component\HttpFoundation\JsonResponse; // Untuk respon JSON class DefaultController { private $entityManager; // Dependency injection EntityManagerInterface public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... metode 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
27
28
29
30Tambahkan route baru pada
config/routes.yaml:yaml# config/routes.yaml # ... route lain ... mysql_add_user: path: /mysql-add-user # atau /pgsql-add-user sesuai database controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # atau /pgsql-users controller: App\Controller\DefaultController::getUsers1
2
3
4
5
6
7
8Tambahkan metode controller di
src/Controller/DefaultController.php:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } /** * @Route("/add-user", name="app_add_user") */ public function addUser(): Response { $user = new User(); // Data demo terkait merek ServBay $user->setName('ServBay Demo User'); $user->setEmail('demo-user@servbay.test'); // Persist entity (siap tulis ke database) $this->entityManager->persist($user); // Commit data ke database $this->entityManager->flush(); return new Response('User berhasil ditambahkan!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // Ambil semua User dari database $users = $this->entityManager->getRepository(User::class)->findAll(); // Konversi ke array agar bisa direspon sebagai JSON $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // Kirim respon JSON return new JsonResponse($usersArray); } }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
67Tes Contoh
- Kunjungi
https://servbay-symfony-test.local/add-useruntuk menambah user. - Kunjungi
https://servbay-symfony-test.local/get-usersuntuk melihat daftar user dalam format JSON.
- Kunjungi
Contoh Cache dan NoSQL (Symfony Cache)
ServBay sudah menyediakan layanan Redis dan Memcached, juga extension PHP-nya, sehingga bisa langsung digunakan dengan Symfony Cache component.
Konfigurasi Koneksi Cache
Set koneksi cache di
.envproyek:- Untuk Memcached: Port default:
11211.dotenvPastikan Memcached aktif di panel ServBay.# .env # ... konfigurasi lain ... CACHE_DSN=memcached://127.0.0.1:112111
2
3 - Untuk Redis: Port default:
6379.dotenvPastikan Redis aktif di panel ServBay.# .env # ... konfigurasi lain ... CACHE_DSN=redis://127.0.0.1:6379 # Jika Redis memakai password (default ServBay tanpa password): # CACHE_DSN=redis://:your_password@127.0.0.1:63791
2
3
4
5
- Untuk Memcached: Port default:
Menambah Contoh Penggunaan Cache
Ubah
src/Controller/DefaultController.php, tambahkan route dan metode contoh untuk operasi cache dengan Memcached atau Redis. Anda perlu injectCacheInterface.Pastikan konstruktor controller menerima
CacheInterface:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; // Import CacheInterface class DefaultController { private $entityManager; private $cache; // Tambahkan property cache // Konstruktor menerima CacheInterface public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... metode 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
25Tambahkan route baru di
config/routes.yaml:yaml# config/routes.yaml # ... route lain ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample1
2
3
4
5Tambahkan metode
cacheExampledi controller:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Component\Cache\Item\ItemInterface; // Import ItemInterface class DefaultController { private $entityManager; private $cache; public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... metode lain ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // Coba ambil data dari cache $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // Callback jika cache miss $item->expiresAfter(3600); // Expire 1 jam // Simulasi proses lama, misal query berat $data = "Data dibuat pada " . date('Y-m-d H:i:s'); // Return data ke cache return $data; }); // $cacheItem berisi data cache atau hasil baru $output = "Dari Cache: " . $cacheItem; return new Response($output); } }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
48Tes Contoh
- Buka
https://servbay-symfony-test.local/cache-example. Pada akses pertama, data akan di-generate dan simpan ke cache. Selanjutnya, data akan langsung diambil dari Memcached atau Redis hingga cache expire.
- Buka
FAQ (Pertanyaan Umum)
T: Saat mengakses https://servbay-symfony-test.local, muncul 404 atau error 500. Apa solusi?
J: Periksa hal berikut:
- Pastikan ServBay berjalan normal, dan server situs (Caddy/Apache) sudah aktif.
- Periksa pengaturan domain
servbay-symfony-test.localdi ServBay, pastikan root directory tepat ke/Applications/ServBay/www/servbay-symfony-app/public. - Lihat file log project Symfony (
var/log/dev.log) untuk detail error. - Jalankan
composer installdi root proyek untuk install semua dependensi. - Pastikan versi PHP sesuai dengan kebutuhan proyek Symfony Anda.
T: Masalah koneksi database?
J: Cek poin berikut:
- Pastikan layanan database (MySQL/PostgreSQL) sudah dijalankan di panel ServBay.
- Pastikan konfigurasi
DATABASE_URLdi.envsudah benar: username, password, host (127.0.0.1), port (MySQL 3306, PostgreSQL 5432), serta nama database. - Pastikan kredensi user/password sesuai dengan default ServBay atau pengaturan yang Anda buat.
- Database
servbay_symfony_appsudah ada dan siap diakses.
T: Kenapa perintah php bin/console tidak jalan?
J: Pastikan terminal Anda berada di folder /Applications/ServBay/www/servbay-symfony-app dan PHP ServBay sudah masuk PATH sistem (umumnya sudah otomatis saat instal). Anda bisa cek dengan which php untuk memastikan menggunakan PHP dari ServBay.
Kesimpulan
Dengan panduan ini, Anda telah sukses membuat, mengatur, dan menjalankan proyek Symfony dasar memakai ServBay di macOS. ServBay menyediakan semua komponen inti yang dibutuhkan (PHP, Composer, server web, database, cache), sehingga proses setup lingkungan pengembangan jadi sangat cepat dan mudah. Anda bisa melanjutkan pengembangan, eksplor fitur Symfony lainnya, dan manfaatkan software serta layanan tambahan dari ServBay.
