Symfony Projesi Oluşturma ve Çalıştırma
ServBay, macOS ve Windows için özel olarak geliştirilen bir yerel web geliştirme ortamıdır. PHP, Node.js, Python, Go, Java gibi birçok programlama dilinin çalışma ortamının yanı sıra MySQL, PostgreSQL, MongoDB, Redis gibi veri tabanlarını da bünyesinde barındırır ve Apache ile Caddy web sunucusu desteği sunar. Bu rehberde, ServBay ile macOS ve Windows üzerinde hızlı bir şekilde bir Symfony projesinin nasıl kurulup çalıştırılacağını ayrıntılı şekilde öğrenebilirsiniz.
Symfony Nedir?
Symfony, SensioLabs tarafından geliştirilen açık kaynak PHP web çatısıdır. Modern web uygulamaları ve API'ler geliştirmek isteyenler için esnek, güçlü ve verimli bir araç seti sunar. Web standartlarına ve en iyi uygulamalara uygun bir şekilde geliştirilmiştir. Yönlendirme, şablon motoru (Twig), form işlemleri, kimlik doğrulama, bağımlılık enjeksiyonu gibi birçok bileşen ile, sık karşılaşılan web geliştirme görevlerini büyük ölçüde kolaylaştırır.
Symfony’nin Başlıca Özellikleri ve Avantajları
- Modüler Yapı: Symfony'nin çekirdeği, tekrar kullanılabilir bileşenlerden oluşur. Geliştiriciler, gereksinimlerine uygun bileşenleri seçebilir ve uygulamalarını hafif ya da kapsamlı bir şekilde inşa edebilirler.
- Yüksek Performans: Optimize edilmiş mimarisi, etkili önbellekleme ve PHP'nin yeni özelliklerini desteklemesi sayesinde üstün performans sunar.
- Güçlü Topluluk Desteği: Büyük bir geliştirici topluluğu, zengin üçüncü parti Bundle'lar (eklentiler) ve kapsamlı belgeleri sayesinde karşılaşılan sorunlar kolayca çözülebilir.
- Esneklik: Çeşitli üçüncü parti kütüphane ve eklentileri kolayca bütünleştirilebilir. Her ölçekte ve karmaşıklıktaki projelere uygundur.
- Stabilite ve Bakım Kolaylığı: İyi kodlama standartlarına ve tasarım şablonlarına uyarak, uygulamaların test edilmesini, bakımını ve genişletilmesini kolaylaştırır.
Symfony hem küçük API projeleri hem de büyük kurumsal sistemler için uygun bir çözümdür.
ServBay ile Symfony Projesi Oluşturma ve Çalıştırma
ServBay, Symfony projelerini çalıştırmak için gereken tüm ortamı sağlar: PHP'nin uygun sürümü, Composer, web sunucusu ve çeşitli veritabanı ve önbellek servisleri. Bu bölümde, ServBay’in sunduğu özelliklerle yeni bir Symfony projesi oluşturup yapılandırmayı adım adım öğreneceksiniz.
Gereksinimler
Başlamadan önce aşağıdaki adımları tamamladığınızdan emin olun:
- ServBay’i Kurun: ServBay’i macOS üzerinde başarıyla kurmuş ve başlatmış olmalısınız. Henüz kurmadıysanız ServBay Kurulum Rehberi başlığını inceleyin.
- ServBay Sorunsuz Çalışıyor: ServBay’in temel servisleri (Caddy veya Apache gibi, ihtiyaç duyduğunuz veritabanları dahil) çalışıyor olmalı.
- Temel Bilgi: PHP, Composer ve Symfony hakkında temel kavramlara aşina olun.
Symfony Projesi Oluşturma
ServBay, web sitesi projelerinizi /Applications/ServBay/www
dizininde düzenli olarak saklamanızı önerir. Bu, ServBay’in projelerinizi kolayca tanımasını ve yönetmesini sağlar.
Composer’ın Kullanıma Hazır Olduğunu Doğrulayın
ServBay kurulumu ile Composer zaten entegre gelir ve gerekli ortam değişkenleri önceden ayarlanmıştır. Ekstra kurulum gerektirmez. Terminalde
composer --version
komutunu yazarak Composer’ın aktif olduğunu doğrulayabilirsiniz.Proje Dizini Oluşturun
Önerilen web sitesi ana dizininde yeni bir Symfony projesi için klasör oluşturun:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
2Composer ile Symfony Projesi Yaratın
Oluşturduğunuz klasöre girin ve
website-skeleton
temelinde bir Symfony proje şablonu oluşturun.website-skeleton
, geleneksel web uygulamalarında yaygın olarak kullanılan bağımlılıkları içeren bir temel sunar.bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .
1
2Bu komut, Symfony ana dosyalarını ve gerekli bağımlılıklarını bulunduğunuz dizine indirir.
Başlangıç Yapılandırması
Symfony projelerinin temel ayarları genellikle kök dizindeki .env
dosyasında yer alan ortam değişkenleriyle yönetilir.
Ortam Değişkenlerini Ayarlayın (
.env
)Proje kök dizininde bulunan
.env
dosyasını açın. Bu dosyada uygulamanın ortam ayarları (ör: veritabanı bağlantı bilgileri, uygulama anahtarı vb.) yer alır. Gereksinimlerinize göre düzenleyin.ServBay ortamınıza uygun şekilde aşağıdaki örnek ayarları uygulayın:
dotenv# .env dosya örneği APP_ENV=dev # Geliştirme ortamı APP_SECRET=your_secret_key # Güvenlik için benzersiz ve rastgele bir dize ile değiştirin # Veritabanı bağlantı örnekleri (örneğin MySQL kullanımı, detayları sonraki bölümlerde bulabilirsiniz) # 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
8your_secret_key
ifadesini güvenli ve rastgele bir karakter dizisi ile değiştirin. Veritabanı bağlantıları için ServBay’in varsayılan kullanıcı adı genelderoot
, şifre isepassword
şeklindedir (unutmayın, canlı ortamlarda bu varsayılan bilgileri mutlaka değiştirin). Örneğimizde veritabanı ismi olarakservbay_symfony_app
kullanıyoruz.
Web Sunucusu Yapılandırması (ServBay Websitesi)
Symfony projenizi tarayıcıda erişilebilir hale getirmek için ServBay’in “Websitesi” özelliğini kullanarak yerel bir sanal host tanımlamanız gerekir. Symfony web root dizini, projenizin public/
klasörüdür.
ServBay kontrol panelini açın, “Websitesi” ayarlarına (eski sürümlerde “Ana bilgisayar” menüsü olabilir) gidin ve yeni bir site ekleyin:
- İsim: Kolayca tanıyabileceğiniz bir ad verin, örneğin
My Symfony Dev Site
. - Alan Adı: Yerel geliştirme için bir alan adı belirleyin, örneğin
servbay-symfony-test.local
. ServBay bunu otomatik olarak yerel makinenize yönlendirecektir. - Site Tipi:
PHP
seçin. - PHP Sürümü: Symfony projenizle uyumlu bir PHP sürümü (ör: ServBay’in önerdiği
8.3
gibi en güncel sürümü) tercih edin. - Web Root Dizini: Bu kritik ayardır. Symfony için web root mutlaka projenizin
public/
dizini olmalı; ayarınızı/Applications/ServBay/www/servbay-symfony-app/public
olarak yapın.
Yapılandırmayı tamamladıktan sonra kaydedin ve değişiklikleri uygulayın. ServBay web sunucu ayarlarını otomatik günceller. ServBay genellikle Caddy ya da Apache’yi kullanır ve SSL sertifikalarını otomatik üretip işletim sistemine güvenilir olarak tanımlar; böylece sitenizi doğrudan HTTPS ile ziyaret edebilirsiniz.
Detaylı adımlar için ServBay'de İlk Websitesi Ekleme başlıklı rehbere göz atın.
Basit Kod Örneği Ekleme
Site yapılandırmanızın başarılı olup olmadığını doğrulamak için, kök dizinde bir yönlendirme ve kontrolcü tasarlayalım -- ana sayfaya girince bir metin çıktı versin.
Yönlendirme Yapılandırması (
config/routes.yaml
)config/routes.yaml
dosyasını açarak aşağıdaki kod ile ana yol (/
) için bir yönlendirme ve bunu yönetecekindex
kontrolcü fonksiyonunu tanımlayın:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index
1
2
3
4Kontrolcü Oluşturma (
src/Controller/DefaultController.php
)src/Controller/
dizininde yeni birDefaultController.php
dosyası oluşturun ve aşağıdaki kodu ekleyin: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 { // Basit bir HTTP yanıtı döndür return new Response('Hello ServBay and Symfony!'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Bu kod, ana dizin
/
isteği için "Hello ServBay and Symfony!" ifadesiyle yanıt veren basit bir kontrolcü oluşturur.
Siteyi Ziyaret Etme
Artık web tarayıcısını açıp ServBay’de tanımladığınız alan adını ziyaret edebilirsiniz: https://servbay-symfony-test.local
. Doğru yapılandırıldıysa ekranda şöyle bir çıktı gözlemleyeceksiniz:
Hello ServBay and Symfony!
1
Bu, Symfony projenizin ServBay’in web sunucusu üzerinden başarıyla çalıştığını gösterir. ServBay SSL sertifikası ayarladığı için siteye https://
ile erişmenizi öneririz.
Veritabanı ve Önbellek Kullanım Örnekleri
Symfony, genelde Doctrine ORM ile ilişkisel veritabanı ve Symfony Cache bileşeni ile önbellek/NoSQL veritabanlarını yönetir. ServBay, çeşitli veritabanı servisleri ve ilgili PHP eklentileriyle bu ihtiyacı kolayca karşılar.
İlişkisel Veritabanı Örneği (Doctrine ORM)
ServBay, MySQL ve PostgreSQL desteği sağlar. Symfony’de bu iki veritabanının nasıl yapılandırıldığını aşağıda bulabilirsiniz.
Veritabanı Bağlantısını Ayarlama
Kök dizindeki
.env
dosyasında kullandığınız veritabanı tipine göreDATABASE_URL
satırını açıp düzenleyin.- MySQL için: ServBay’in varsayılan MySQL kullanıcı adı
root
, şifresipassword
, portu ise3306
’dır. Ayarınızı ServBay paneline göre düzenleyin.dotenv# .env DATABASE_URL="mysql://root:password@127.0.0.1:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2 - PostgreSQL için: ServBay’in varsayılan PostgreSQL kullanıcı adı
root
, şifresipassword
, portu ise5432
’dir. Ayarınızı ServBay paneline göre düzenleyin.dotenv# .env DATABASE_URL="postgresql://root:password@127.0.0.1:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
ServBay panelinden ilgili veritabanı servislerinin (MySQL veya PostgreSQL) aktif olduğundan emin olun.
- MySQL için: ServBay’in varsayılan MySQL kullanıcı adı
Veritabanı Oluşturma
Eğer
servbay_symfony_app
isimli veritabanı yoksa, ServBay’in panelinden phpMyAdmin ya da pgAdmin gibi araçlarla manuel oluşturabilir veya Symfony komutu ile hızlıca oluşturabilirsiniz:bashphp bin/console doctrine:database:create
1Entity (Varlık) ve Migration (Göç) Dosyası Oluşturma
Doctrine Entity, veritabanı tablolarını temsil eder. Maker Bundle ile Entity ve migration dosyaları kolayca üretilir.
- Entity Oluşturma (örneğin
User
varlığı):bashİstenilen alanları ekleyin; örneğinphp bin/console make:entity User
1name
(string),email
(string, unique=yes) gibi. - Migration Dosyası Oluşturma: Entity değişikliklerinden sonra migration dosyası oluşturun:bashBu işlem,
php bin/console make:migration
1src/Migrations
klasöründe tablo oluşturma SQL’i içeren bir migration dosyası üretir.
- Entity Oluşturma (örneğin
Göç İşlemini Çalıştırma
Migration komutu veritabanı yapısını veritabanınıza uygular:
bashphp bin/console doctrine:migrations:migrate
1Veritabanı İşlemleri Örneği Ekleme
src/Controller/DefaultController.php
dosyasını düzenleyin. Doctrine ile veri ekleme/okuma örnekleri için EntityManagerInterface’i kullanın.Öncelikle kontrolcünün yapıcı fonksiyonu ile EntityManagerInterface’i alın:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; // EntityManagerInterface’i dahil et use App\Entity\User; // User Entity’sini dahil et use Symfony\Component\HttpFoundation\JsonResponse; // JSON için class DefaultController { private $entityManager; // Bağımlılık enjeksiyonu ile EntityManagerInterface örneğini al public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... Diğer metodlar ... }
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
30Ardından
config/routes.yaml
dosyasına yeni yönlendirmeler ekleyin:yaml# config/routes.yaml # ... diğer yönlendirmeler ... mysql_add_user: path: /mysql-add-user # ya da /pgsql-add-user, kullandığınız veritabanına göre controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # ya da /pgsql-users controller: App\Controller\DefaultController::getUsers
1
2
3
4
5
6
7
8Kontrolcüye ilgili metodları ekleyin:
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; // JSON için 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(); // ServBay marka örnek verisi kullan $user->setName('ServBay Demo User'); $user->setEmail('demo-user@servbay.test'); // Nesneyi kalıcı duruma getir $this->entityManager->persist($user); // Yazma işlemini uygula $this->entityManager->flush(); return new Response('Kullanıcı başarıyla eklendi!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // Tüm User kayıtlarını veritabanından al $users = $this->entityManager->getRepository(User::class)->findAll(); // Sonuçları JsonResponse ile işlemek için diziye dönüştür $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // JSON formatında yanıt döndür 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
67Örnek Adresler:
https://servbay-symfony-test.local/add-user
ile bir kullanıcı ekleyin.https://servbay-symfony-test.local/get-users
ile eklenen kullanıcıları (JSON olarak) görüntüleyin.
Önbellek ve NoSQL Veritabanı Kullanımı (Symfony Cache)
ServBay, Redis ve Memcached ile uyumludur ve PHP eklentileri önceden yüklüdür. Symfony Cache komponentiyle bu servisleri doğrudan kullanabilirsiniz.
Önbellek Bağlantısı Yapılandırma
.env
dosyasında önbellek servisi için bağlantı dizesini aşağıdaki şekilde ayarlayın.- Memcached için: ServBay’de varsayılan Memcached portu
11211
’dir.dotenvServBay panelinden Memcached servisinin aktif olduğundan emin olun.# .env # ... diğer ayarlar ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3 - Redis için: ServBay’de varsayılan Redis portu
6379
’dur.dotenvServBay panelinden Redis servisinin aktif olduğundan emin olun.# .env # ... diğer ayarlar ... CACHE_DSN=redis://127.0.0.1:6379 # Eğer Redis şifre gerekiyorsa (ServBay varsayılan olarak şifresiz gelir), şöyle ayarlayın: # CACHE_DSN=redis://:your_password@127.0.0.1:6379
1
2
3
4
5
- Memcached için: ServBay’de varsayılan Memcached portu
Önbellek Kullanımına Örnek Ekleme
src/Controller/DefaultController.php
dosyasında önbellek işlemleri için örnek bir yönlendirme ve metod ekleyin; CacheInterface’i kullanın.Öncelikle kontrolcünün kurucu fonksiyonu ile CacheInterface’i alın:
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; // CacheInterface’i dahil et class DefaultController { private $entityManager; private $cache; // Önbellek // Bağımlılık enjeksiyonu ile CacheInterface’i al public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... diğer metodlar ... }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Ardından yönlendirme tanımını ekleyin:
yaml# config/routes.yaml # ... diğer yönlendirmeler ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample
1
2
3
4
5Kontrolcüye örnek metoda ekleyin:
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; // ItemInterface’i dahil et class DefaultController { private $entityManager; private $cache; public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... diğer metodlar ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // Önbellekten veri almaya çalış $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // Önbellek yoksa bu fonksiyon çalışır $item->expiresAfter(3600); // 1 saat geçerli olacak şekilde ayarla // Zaman alan örnek işlem gerçekleştir $data = "Data generated at " . date('Y-m-d H:i:s'); // Önbelleğe eklenecek veriyi döndür return $data; }); // $cacheItem artık önbellekten ya da yeni üretilmiş veri $output = "Önbellekten: " . $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
48Örnek Adres:
https://servbay-symfony-test.local/cache-example
adresine gidin. İlk ziyaretinizde veri üretilir ve önbelleğe eklenir. Sonraki ziyaretlerde, veriniz önbellekten otomatik olarak gelir - bunun için Memcached veya Redis kullanılır.
Sıkça Sorulan Sorular (SSS)
S: https://servbay-symfony-test.local
ziyaret ettiğimde sayfa bulunamadı veya 500 hatası alıyorum, ne yapmalıyım?
C: Şu adımları kontrol edin:
- ServBay’in çalıştığından ve web sitesi servisinin (Caddy veya Apache) aktif olduğundan emin olun.
- ServBay site yapılandırmasında alan adınızın (
servbay-symfony-test.local
) doğru olduğundan ve “Web Root” ayarının/Applications/ServBay/www/servbay-symfony-app/public
dizinine işaret ettiğinden emin olun. - Symfony proje loglarını (
var/log/dev.log
) inceleyerek ayrıntılı hata bilgilerini gözden geçirin. - Proje kökünde
composer install
komutu ile tüm bağımlılıkların yüklü olduğundan emin olun. - PHP sürümünüzün Symfony ile uyumlu olduğundan emin olun.
S: Veritabanı bağlantısı başarısız oldu, ne yapabilirim?
C: Şu adımları kontrol edin:
- ServBay panelinde ilgili veritabanı servisi (MySQL ya da PostgreSQL) etkin mi?
.env
dosyasındaDATABASE_URL
satırı doğru mu, kullanıcı adı/şifre/host (127.0.0.1)/port (MySQL 3306, PostgreSQL 5432) ve veritabanı ismi eksiksiz mi?- Veritabanı kullanıcı ve şifresi ServBay’in varsayılanı (veya siz değiştiyseniz güncel hali) ile uyumlu mu?
- Bağlanmak istediğiniz veritabanı ismi (
servbay_symfony_app
) gerçekten mevcut mu?
S: php bin/console
komutunu çalıştıramıyorum, neden?
C: Terminalde bulunduğunuz dizin /Applications/ServBay/www/servbay-symfony-app
olduğundan ve ServBay’in PHP’si sistem PATH’ına doğru şekilde tanımlandığından emin olun (ServBay yüklenirken otomatik olarak ayarlanır). Terminalde which php
komutu ile aktif PHP yolunu kontrol edebilirsiniz.
Sonuç
Bu rehberi takip ederek ServBay ile macOS üzerinde temel bir Symfony projesini başarıyla oluşturdunuz, yapılandırdınız ve çalıştırdınız. ServBay, PHP, Composer, web sunucusu, veritabanı ve önbellek gibi Symfony geliştirme için gerekli tüm altyapıyı sağlar ve ortam kurulumunu kolaylaştırır. Artık uygulama geliştirmeye hızlıca başlayabilir, bu temel proje üzerinden Symfony’nin başka özelliklerine geçebilir ve ServBay’in sunduğu diğer yazılım ve servislerden yararlanabilirsiniz.