Membina & Menjalankan Projek Symfony
ServBay ialah persekitaran pembangunan Web tempatan khas untuk macOS yang menyatukan runtime bagi pelbagai bahasa utama seperti PHP, Node.js, Python, Go, dan Java. Ia juga menyediakan sokongan untuk pangkalan data seperti MySQL, PostgreSQL, MongoDB, Redis, serta pelayan web Apache dan Caddy. Panduan ini akan menerangkan secara terperinci cara membina dan menjalankan projek Symfony anda di macOS menggunakan ServBay.
Apa Itu Symfony?
Symfony merupakan rangka kerja Web sumber terbuka PHP ciptaan SensioLabs. Ia menyediakan set perkakas yang cekap, fleksibel, dan berkuasa untuk membina aplikasi web moden dan API. Symfony menepati amalan terbaik Web piawai dan menawarkan banyak komponen seperti routing, enjin templat (Twig), pemprosesan borang, pengesahan, dependency injection, dan sebagainya—memudahkan tugasan pembangunan Web yang biasa.
Ciri & Kelebihan Utama Symfony
- Reka Bentuk Modular: Teras Symfony ialah perpustakaan komponen boleh guna semula, di mana pembangun boleh memilih komponennya mengikut keperluan bagi membina aplikasi dari ringan ke berat.
- Prestasi Tinggi: Dengan seni bina dioptimumkan, mekanisme cache yang cekap, serta sokongan ciri PHP terkini, Symfony menawarkan prestasi luar biasa.
- Komuniti yang Kuat: Terdapat komuniti pembangun yang besar, pelbagai Bundle (pemalam) pihak ketiga, serta dokumentasi yang terperinci, memudahkan anda mencari penyelesaian apabila menghadapi masalah.
- Fleksibiliti: Mudah untuk diintegrasikan dengan pelbagai pustaka dan ekstensi pihak ketiga, sesuai untuk pelbagai jenis dan saiz projek.
- Stabil & Mudah Diselenggara: Mengikuti piawaian pengekodan dan corak reka bentuk yang baik menjadikan aplikasi mudah diuji, disenggara, serta dikembangkan.
Symfony sesuai untuk membina apa jua aplikasi Web — daripada API kecil hingga sistem korporat berskala besar.
Membina & Menjalankan Projek Symfony dengan ServBay
ServBay menyediakan persekitaran lengkap untuk projek Symfony anda—termasuk PHP, Composer, pelayan web, juga pelbagai perkhidmatan pangkalan data dan cache. Bahagian ini akan memandu anda membina projek Symfony baharu serta melengkapkannya dengan konfigurasi sesuai menggunakan fungsi dari ServBay.
Prasyarat
Sebelum bermula, pastikan anda telah:
- Memasang ServBay: ServBay telah berjaya dipasang dan dijalankan di macOS anda. Jika belum, sila rujuk Panduan Pemasangan ServBay.
- ServBay Berfungsi dengan Baik: Semua servis penting ServBay (seperti Caddy atau Apache, dan pangkalan data anda) telah dijalankan.
- Pengetahuan Asas: Anda memahami asas PHP, Composer, dan konsep Symfony.
Membina Projek Symfony
Untuk kemudahan pengurusan, ServBay mengesyorkan anda meletakkan projek laman web di dalam direktori /Applications/ServBay/www
.
Sahkan Composer Sedia Digunakan
ServBay telah menyepadukan Composer sewaktu pemasangan, lengkap dengan konfigurasi pembolehubah persekitaran. Anda tidak perlu memasang Composer secara manual. Jalankan perintah berikut di Terminal untuk menyemak Composer:
bashcomposer --version
1Cipta Direktori Projek
Buat direktori baharu dalam direktori root laman web:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
2Cipta Projek Symfony Menggunakan Composer
Masuk ke direktori projek, gunakan Composer untuk cipta rangka projek
website-skeleton
Symfony.website-skeleton
ialah rangka asas dengan kebergantungan lazim untuk aplikasi web tradisional.bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .
1
2Selepas menjalankan arahan ini, Composer akan memuat turun fail-fail teras Symfony serta kebergantungan ke direktori semasa.
Konfigurasi Awal
Konfigurasi utama projek Symfony biasanya dikendalikan melalui pembolehubah persekitaran di fail .env
pada direktori root projek.
Konfigurasi Pembolehubah Persekitaran (
.env
)Buka fail
.env
di root projek. Di sini, anda akan meletakkan konfigurasi seperti sambungan pangkalan data, kunci aplikasi, dsb. Ubah atau tambah entri mengikut keperluan anda.Pastikan konfigurasi berikut telah betul atau diselaraskan dengan persekitaran ServBay anda:
dotenv# Contoh fail .env APP_ENV=dev # Persekitaran pembangunan APP_SECRET=your_secret_key # Gantikan dengan rentetan rawak unik untuk tujuan keselamatan # Maklumat sambungan pangkalan data (MySQL sebagai contoh, dijelaskan selepas ini) # DATABASE_URL="mysql://db_user:[email protected]:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:[email protected]:5432/db_name?serverVersion=13&charset=utf8" # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
1
2
3
4
5
6
7
8Gantikan
your_secret_key
dengan rentetan rawak yang selamat. Untuk sambungan pangkalan data, pengguna lalai ServBay biasanyaroot
, passwordpassword
(pastikan anda menukar maklumat ini untuk production). Nama pangkalan data contoh yang digunakan:servbay_symfony_app
.
Konfigurasi Pelayan Web (Laman ServBay)
Untuk mengakses projek Symfony melalui pelayar web, konfigurasikan laman maya menggunakan fungsi "Laman Web" di ServBay. Root web Symfony ialah direktori public/
dalam projek anda.
Buka panel kawalan ServBay, navigasi ke tetapan "Laman Web" (atau "Host" dalam versi lama), dan tambah laman baharu:
- Nama (Name): Namakan laman, contohnya
My Symfony Dev Site
. - Domain: Gunakan nama domain tempatan seperti
servbay-symfony-test.local
. ServBay akan mengarahkannya ke localhost. - Jenis Laman Web (Website Type): Pilih
PHP
. - Versi PHP (PHP Version): Pilih versi PHP yang sesuai (disarankan versi stable terbaru, contoh:
8.3
). - Root Laman Web (Website Root): WAJIB letak ke direktori
public/
projek anda, cth./Applications/ServBay/www/servbay-symfony-app/public
.
Simpan dan laksanakan perubahan. ServBay akan kemas kini konfigurasi pelayan web anda secara automatik. Secara default, ServBay menggunakan Caddy atau Apache, dan SSL (https) untuk domain tempatan diaktifkan serta dipercayai automatik.
Untuk panduan langkah demi langkah, rujuk Tambah Laman Web Pertama di ServBay.
Tambah Kod Contoh Asas
Sebagai ujian konfigurasi laman web, mari tambah routing dan controller mudah untuk papar teks pada laluan utama.
Konfigurasi Laluan (
config/routes.yaml
)Tambah laluan utama
/
yang memanggil kaedah controllerindex
:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index
1
2
3
4Cipta Controller (
src/Controller/DefaultController.php
)Cipta fail baharu di
src/Controller/DefaultController.php
dengan kod 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 { // Kembalikan respon HTTP ringkas return new Response('Hello ServBay and Symfony!'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Kod di atas mencipta kelas controller mudah
DefaultController
di mana kaedahindex
akan dipanggil bila laluan/
diakses. Ia mengembalikan teks "Hello ServBay and Symfony!"
Akses Laman Web
Sekarang, buka pelayar web anda dan kunjungi https://servbay-symfony-test.local
. Jika semuanya telah dikonfigurasi dengan betul, anda akan nampak:
Hello ServBay and Symfony!
1
Ini bermakna projek Symfony anda telah berjaya dijalankan melalui pelayan web ServBay, lengkap dengan SSL. Gunakan laman ini dengan https://.
Contoh Pangkalan Data & Cache
Symfony biasanya menggunakan Doctrine ORM untuk database relasi dan komponen Cache untuk cache serta NoSQL. ServBay menyokong pelbagai servis berkenaan beserta sambungan PHP-nya agar mudah digunakan dalam projek Symfony anda.
Contoh Database Relasi (Doctrine ORM)
ServBay menyokong MySQL & PostgreSQL. Berikut cara konfigurasi dan penggunaan kedua-dua database dalam Symfony.
Konfigurasi Sambungan Database
Di
.env
, nyah komen dan ubah suaiDATABASE_URL
mengikut jenis database anda.- MySQL: Default user:
root
, password:password
, port:3306
dotenv# .env DATABASE_URL="mysql://root:[email protected]:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2 - PostgreSQL: Default user:
root
, password:password
, port:5432
dotenv# .env DATABASE_URL="postgresql://root:[email protected]:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
Pastikan perkhidmatan database berkaitan telah dimulakan dari panel kawalan ServBay.
- MySQL: Default user:
Cipta Database
Jika database
servbay_symfony_app
belum wujud, anda boleh cipta secara manual (dengan phpMyAdmin atau pgAdmin) atau gunakan perintah Symfony:bashphp bin/console doctrine:database:create
1Cipta Entity & Migration File
Gunakan Maker Bundle untuk menjana Entity dan fail migrasi.
- Entity contoh
User
:bashIkuti arahan (cth. nama, email unik).php bin/console make:entity User
1 - Jana fail migrasi:bashFail migrasi SQL akan dicipta dalam
php bin/console make:migration
1src/Migrations
.
- Entity contoh
Jalankan Migrasi
Terapkan struktur database:
bashphp bin/console doctrine:migrations:migrate
1Tambah Contoh Operasi Database
Ubah suai
src/Controller/DefaultController.php
supaya injectEntityManagerInterface
untuk operasi database.Inject
EntityManagerInterface
dalam constructor: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 User use Symfony\Component\HttpFoundation\JsonResponse; // Untuk JSON response class DefaultController { private $entityManager; // Injek EntityManagerInterface public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... kaedah 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
30Tambah routing baharu dalam
config/routes.yaml
:yaml# config/routes.yaml # ... laluan lain ... mysql_add_user: path: /mysql-add-user # atau /pgsql-add-user bergantung database controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # atau /pgsql-users controller: App\Controller\DefaultController::getUsers
1
2
3
4
5
6
7
8Tambah kaedah controller yang berkaitan:
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; // Import 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 contoh berkait dengan jenama ServBay $user->setName('ServBay Demo User'); $user->setEmail('[email protected]'); // Persist ke database $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User berjaya ditambah!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // Ambil semua User dari database $users = $this->entityManager->getRepository(User::class)->findAll(); // Tukar kepada array untuk JSON $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // Kembalikan sebagai 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
66Akses Contoh
- Layari
https://servbay-symfony-test.local/add-user
untuk tambah user. - Layari
https://servbay-symfony-test.local/get-users
untuk paparan user (dalam JSON).
- Layari
Contoh Cache & NoSQL (Symfony Cache)
ServBay dibekalkan dengan Redis dan Memcached serta ekstensi PHP berkaitan. Symfony Cache dapat menggunakan servis ini terus.
Konfigurasikan Sambungan Cache
Dalam
.env
, tetapkan perkhidmatan cache anda.- Memcached: Port lalai:
11211
dotenvPastikan Memcached telah dijalankan dari panel kawalan ServBay.# .env # ... konfigurasi lain ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3 - Redis: Port lalai:
6379
dotenvPastikan Redis juga telah dimulakan.# .env # ... konfigurasi lain ... CACHE_DSN=redis://127.0.0.1:6379 # Jika Redis perlukan password, gunakan: # CACHE_DSN=redis://:[email protected]:6379
1
2
3
4
5
- Memcached: Port lalai:
Tambah Contoh Penggunaan Cache
Ubah constructor
DefaultController
agar injectCacheInterface
: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; // Tambah property cache // Inject CacheInterface public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... kaedah 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
25Tambah routing dalam
config/routes.yaml
:yaml# config/routes.yaml # ... laluan lain ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample
1
2
3
4
5Tambah kaedah controller contoh penggunaan cache:
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; } // ... kaedah lain ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // Dapatkan data dari cache jika ada, jika tidak jalankan callback $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // Jika cache tiada, callback dijalankan $item->expiresAfter(3600); // Cache selama 1 jam // Simulasi operasi yang mengambil masa, spt query database yang kompleks $data = "Data dijana pada " . date('Y-m-d H:i:s'); // Return data untuk dicache return $data; }); // Data dari cache atau hasil baru $output = "Daripada 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
48Akses Contoh
- Kunjungi
https://servbay-symfony-test.local/cache-example
. Kali pertama ia akan jana dan simpan data ke cache, kali berikutnya akan terus baca dari cache selagi belum tamat tempoh.
- Kunjungi
Soalan Lazim (FAQ)
S: Saya dapat error 'halaman tidak dijumpai' atau 500 bila akses https://servbay-symfony-test.local
?
J: Sila semak:
- ServBay telah dijalankan dan servis laman web (Caddy/Apache) aktif.
- Konfigurasi laman ServBay—pastikan domain
servbay-symfony-test.local
betul dan root direktori ke/Applications/ServBay/www/servbay-symfony-app/public
. - Siasat log Symfony (
var/log/dev.log
). - Jalankan
composer install
untuk pastikan semua kebergantungan telah dipasang. - Versi PHP sesuai dengan keperluan projek Symfony.
S: Sambungan database gagal?
J: Periksa:
- Perkhidmatan MySQL/PostgreSQL diaktifkan di panel kawalan ServBay.
DATABASE_URL
dalam.env
adalah betul (username, password, host127.0.0.1
, port3306/5432
, nama DB).- Username/password sama seperti yang ditetapkan dalam ServBay.
- Database
servbay_symfony_app
telah diwujudkan.
S: Kenapa php bin/console
tak jalan?
J: Pastikan direktori semasa dalam Terminal adalah /Applications/ServBay/www/servbay-symfony-app
dan PHP dari ServBay telah dikonfigurasi dalam PATH (biasanya automatik). Semak dengan which php
.
Rumusan
Melalui panduan ini, anda telah berjaya membina, konfigurasi, dan menjalankan projek Symfony asas menggunakan ServBay di macOS. ServBay menyediakan semua komponen utama yang diperlukan—PHP, Composer, pelayan web, database, cache—dan memudahkan penyediaan persekitaran anda agar anda boleh terus fokus pada pembangunan aplikasi. Berdasarkan projek asas ini, teruskan belajar ciri Symfony lain dan manfaatkan pakej serta perkhidmatan tambahan dari ServBay untuk projek anda.