Belajar Symfony - Arsitektur, Filosofi & Komponen
Episode 2 of 27

Belajar Symfony - Arsitektur, Filosofi & Komponen

Membedah filosofi Symfony: kombinasi komponen decoupled dengan framework full-stack, alur request/response lewat HttpKernel, pola MVC, Dependency Injection Container, Event Dispatcher, serta peran Flex recipes dalam menkonfigurasi project secara otomatis.

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

Pendahuluan

Setelah memahami sejarah Symfony di episode 1 — lahir sebagai proyek 2005 dengan model komponen reusable — pada episode ini kita membedah arsitektur internalnya: bagaimana sebuah request HTTP berubah menjadi response, dan komponen-komponen mana yang berperan di setiap tahap.

Mengapa arsitektur ini penting dipahami? Karena seluruh episode praktik berikutnya (routing di episode 4, DI di episode 8, security di episode 12) hanyalah cara memperkenalkan fitur ke dalam alur yang sama. Begitu kalian memahami peta jalan request/response, memahami setiap fitur Symfony menjadi jauh lebih mudah — kalian selalu tahu di lapisan mana suatu mekanisme bekerja.

Filosofi: Decoupled Components + Full-Stack

Symfony menganut filosofi ganda yang jarang dimiliki framework lain:

  1. Sebagai komponen: 60+ package Composer yang bisa dipakai sendiri-sendiri di project mana pun.
  2. Sebagai framework: kerangka kerja penuh (bundle, konfigurasi, struktur project) yang menyatukan komponen-komponen itu.
PendekatanCocok untuk
Komponen saja (mis. symfony/console)CLI tool, micro-service, script internal
Full-stack (Symfony FrameworkBundle)Aplikasi web/API yang besar dan terstruktur

Filosofi ini membawa satu konsekuensi: konfigurasi cenderung eksplisit — tidak ada magic yang tersembunyi. Segala sesuatu (routing, service, security) didefinisikan lewat config atau attribute, dan bisa di-debug dengan perintah bin/console. Inilah yang membuat Symfony "predictable" untuk tim besar.

Alur Request/Response (HttpKernel)

Inti arsitektur Symfony adalah HttpKernel: komponen yang mengubah Request (objek PHP mewakili HTTP request) menjadi Response. Alurnya kira-kira begini:

100%

Tahapan kerjanya:

  1. public/index.php memuat kernel aplikasi dan mengirim Request.
  2. Router mencocokkan URL dengan route dan memanggil controller terkait.
  3. Controller memproses logika (memanggil service, query database, render template) dan mengembalikan Response.
  4. HttpKernel mengirimkan response kembali ke klien, lalu menangani lifecycle events (misal logging).

index.php hampir tidak pernah berubah — kalian bisa membukanya sekarang untuk melihat berapa banyak baris yang menangani seluruh aplikasi. Semua kecerdasan ada di framework, bukan di front controller.

MVC: Controller, Model, View

Symfony adalah framework MVC: Controller (logika permintaan), Model (entitas/bisnis — dipegang Doctrine ORM), dan View (template — dipegang Twig). Peran tiap lapisan:

LapisanKomponenTanggung jawab
ControllerAbstractControllerMenerima request, memanggil service, mengembalikan response
ModelDoctrine EntityData, relasi, dan logika bisnis
ViewTwig templateRendering HTML/JSON dari data

Pemisahan ini bukan aturan kosmetik: ia memungkinkan tim bekerja paralel (frontend merancang Twig, backend menulis service) dan memudahkan testing setiap lapisan secara independen.

Dependency Injection Container

Symfony adalah framework yang selalu ter-inject, tidak pernah instansiasi manual. Service container bertugas membuat dan mengelola objek (service) serta menyuntikkannya ke tempat yang membutuhkan. Ini memecahkan masalah nyata: alih-alih menulis new Mailer(...) di banyak tempat, kalian cukup mendeklarasikan satu service dan meminta container menyuntikkannya — otomatis (autowiring). Kita bedah penuh di episode 8.

Event Dispatcher

Symfony memakai pola event-driven: framework dan bundle mengirim events pada titik-titik tertentu (request masuk, exception, response keluar, cache invalidate), dan subscriber bisa "mendengarkan" lalu menjalankan logika tambahan. Contoh nyata: sebelum menghitung Response, listener logging mencatat waktu; saat Response keluar, listener security menambahkan header. Ini fondasi dari banyak fitur yang dibahas sepanjang series (misal listener security headers di episode 18).

Komponen Inti

Berikut komponen yang akan menemani kita sepanjang series:

KomponenPeranEpisode
HttpKernelAlur request/response2
RoutingPemetaan URL ke controller4
TwigTemplating5
Doctrine ORMDatabase & entity6
Form / ValidatorInput & validasi7
DependencyInjectionService container8
ConsoleCLI commands9
MessengerQueue & async10
HttpClientHTTP keluar11
SecurityAuthN & AuthZ12

Flex dan Recipes

Satu mekanisme yang membuat Symfony 4+ terasa "magis" adalah Symfony Flex: ia mengganti cara install bundle lama dengan konsep recipes. Saat kalian menjalankan composer require api, Flex memilih recipe yang sesuai (project tipe webapp/skeleton), lalu secara otomatis menambahkan konfigurasi, bundle, dan file yang dibutuhkan:

Menginstall dengan Flex
composer require doctrine/orm
composer require api
composer require --dev symfony/maker-bundle

Setiap perintah di atas memodifikasi config/packages/, config/bundles.php, dan composer.json tanpa kalian menyentuh apa pun secara manual. Recipes inilah yang membuat setup Symfony terasa modern dibandingkan versi 2-3 yang harus dikonfigurasi manual baris demi baris.

Tip

Karena Flex bekerja berdasarkan tipe project, biasakan membedakan dua distribusi resmi: symfony/skeleton (minimal, untuk API/CLI) dan symfony/webapp (lengkap dengan Doctrine, Twig, Security, dll). Kita bahas keduanya di episode 3.

Penutup

Pada episode 2 ini, kalian telah memahami kerangka berpikir arsitektur Symfony.

Inti yang harus dibawa pulang:

  • Filosofi ganda: komponen decoupled + framework full-stack.
  • HttpKernel adalah jantungnya: Request masuk, controller dipanggil, Response keluar.
  • MVC dipegang tiga komponen: controller, Doctrine entity, dan Twig.
  • DI container dan Event Dispatcher adalah dua fondasi yang membuat seluruh fitur berjalan otomatis.
  • Flex recipes mengotomasi instalasi bundle & konfigurasi.

Di episode 3 selanjutnya, kita mulai praktik nyata: membuat project Symfony pertama, memahami struktur direktori (src/, config/, templates/, migrations/, public/), menjalankan server dev, dan mengenal bin/console. Sampai jumpa di episode 3!