Belajar Symfony - Instalasi & Struktur Project
Episode 3 of 27

Belajar Symfony - Instalasi & Struktur Project

Membuat project Symfony pertama dengan composer create-project dan Symfony CLI, memahami peran tiap direktori (src, config, templates, migrations, public), menjalankan server dev, serta mengenal bin/console sebagai gerbang utama semua perintah framework.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 2 kita memahami arsitektur — HttpKernel, MVC, DI container, Event Dispatcher — saatnya menciptakan project nyata. Episode 3 adalah momen penting: instalasi dan pemahaman struktur project. Banyak pemula melewati bagian ini terlalu cepat lalu bingung ketika file berada "di tempat yang tidak terduga".

Struktur project Symfony bukan sekadar konvensi — ia mencerminkan arsitektur episode 2. Direktori config/ berisi konfigurasi container & routes, src/ berisi kode aplikasi, templates/ berisi view. Memahami peta ini akan membuat seluruh episode berikutnya (yang terus merujuk ke file di src/ dan config/) terasa ringan.

Membuat Project Baru

Ada dua cara resmi, hasilnya setara:

Opsi 1: Composer create-project
composer create-project symfony/skeleton my_app "^8.1"
cd my_app
Opsi 2: Symfony CLI
symfony new my_app --version=8.1
cd my_app

Perbedaan keduanya tipis: Symfony CLI menambahkan kemudahan seperti integrasi HTTPS lokal dan server dev satu-perintah. Keduanya memakai Symfony Flex di belakang layar, jadi hasilnya project skeleton standar.

Struktur project hasil generate
my_app/
├── bin/console          # pintu masuk semua command Symfony
├── config/              # konfigurasi routing, packages, services
│   ├── packages/        # config per-bundle (di-generate Flex)
│   ├── routes/          # definisi route per-bundle
│   ├── bundles.php      # daftar bundle aktif
│   └── services.yaml    # konfigurasi service container
├── migrations/          # file migrasi database
├── public/              # document root (index.php, assets)
├── src/                 # kode aplikasi: Controller, Entity, dll
│   └── Kernel.php
├── templates/           # template Twig
├── var/                 # cache, log (tidak di-commit)
├── vendor/              # dependensi Composer (tidak di-commit)
├── .env                 # default environment variables
└── composer.json        # manifest project

Perhatikan yang membedakan dengan framework lain: public/ adalah satu-satunya direktori yang ter-expose ke web server. Semua logika ada di luar document root — langkah keamanan yang sudah bawaan.

Menjalankan Server Dev

Jalankan server lewat Symfony CLI atau PHP bawaan:

Server development
symfony server:start

Lalu buka https://localhost:8000. Alternatif tanpa Symfony CLI:

Alternatif: PHP built-in server
php -S localhost:8000 -t public

Tip

symfony server:start melakukan dua hal yang membantu di dev: mengarahkan semua request ke public/index.php (rewrite layaknya nginx/apache), dan menyediakan HTTPS lokal otomatis. Untuk kecepatan di episode-episode awal, cukup php -S juga sudah memadai.

Mengenal bin/console

bin/console adalah pintu gerbang seluruh command Symfony. Coba beberapa perintah dasar:

Perintah dasar bin/console
php bin/console about          # ringkasan versi & environment
php bin/console list           # daftar semua command
php bin/console debug:router   # daftar semua route
php bin/console cache:clear    # bersihkan cache
php bin/console make:controller # buat controller (butuh MakerBundle)

make:controller akan kita pakai di episode 4. Jika perintah make:* tidak tersedia, tambahkan MakerBundle:

Install MakerBundle
composer require --dev symfony/maker-bundle

MakerBundle menghasilkan boilerplate kode — kita tetap wajib memahami apa yang ia generate, bukan sekadar menekan enter.

Distribusi: Skeleton vs Webapp

Flex memilih recipe berdasarkan distribusi project:

DistribusiIsi bawaanCocok untuk
symfony/skeletonMinimal: HttpKernel, Routing, ConsoleAPI, microservice, CLI
symfony/webapp+ Doctrine, Twig, Security, Maker, dll.Aplikasi web penuh

Untuk mengikuti series ini, install komponen sesuai kebutuhan di tiap episode (misal composer require doctrine/orm di episode 6). Ini justru mengajarkan peran tiap bundle secara bertahap — lebih baik daripada men-download semua sekaligus tanpa paham.

Upgrade skeleton ke webapp secara selektif
composer require twig
composer require doctrine/orm
composer require security-bundle

Environment dan .env

File .env adalah sumber konfigurasi lingkungan — detail penuhnya di episode 16. Untuk sekarang, ketahui yang esensial: APP_ENV=dev mengaktifkan profiler & toolbar, APP_SECRET wajib diubah pada project produksi, dan DATABASE_URL menentukan koneksi database yang dipakai episode 6.

.env — konfigurasi dasar
APP_ENV=dev
APP_SECRET=74e2f6d9c0a3b4d8e1f2a3b4c5d6e7f8
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"

Verifikasi Instalasi

Sebelum lanjut, pastikan semuanya sehat:

Verifikasi project
php bin/console about
symfony server:status
curl -I http://localhost:8000/

about menampilkan versi PHP, Symfony, dan environment aktif. curl -I harus mengembalikan status HTTP/2 200.

Penutup

Pada episode 3 ini, kalian telah membuat project Symfony pertama dan memahami petanya.

Inti yang harus dibawa pulang:

  • Install lewat composer create-project symfony/skeleton atau symfony new.
  • Hanya public/ yang ter-expose ke web; sisanya di luar document root.
  • bin/console adalah gerbang semua perintah; make:* butuh MakerBundle.
  • Pilih skeleton (minimal) atau webapp (lengkap) sesuai kebutuhan.
  • .env menyimpan konfigurasi lingkungan; APP_SECRET jangan dibiarkan default di produksi.

Di episode 4 selanjutnya kita membangun routing & controllers: attribute #[Route], parameter path dengan requirement, pembatasan method HTTP, tipe-tipe Response (JSON, redirect, file), dan dependency injection ke controller. Sampai jumpa di episode 4!