Symfony Projesi Oluşturma ve Çalıştırma
ServBay, macOS için özel olarak tasarlanmış yerel bir Web geliştirme ortamıdır. PHP, Node.js, Python, Go, Java gibi birçok dil çalışma zamanını ve MySQL, PostgreSQL, MongoDB, Redis gibi çeşitli veri tabanlarını entegre olarak sunar. Ayrıca Apache ve Caddy web sunucularını destekler. Bu rehberde, ServBay ile macOS üzerinde hızlı bir şekilde Symfony projesi kurup çalıştırmanın detaylarını bulacaksınız.
Symfony Nedir?
Symfony, SensioLabs tarafından geliştirilen, açık kaynaklı bir PHP Web çatısıdır. Modern Web uygulamaları ve API'ler geliştirmek isteyenler için verimli, esnek ve güçlü bir araç seti sunmayı amaçlar. Standart Web en iyi uygulamalarını takip eder, zengin bileşenlerle (yönlendirme, şablon motoru (Twig), form işleme, kimlik doğrulama, bağımlılık enjeksiyonu vb.) birlikte gelir ve yaygın geliştirme görevlerini büyük ölçüde kolaylaştırır.
Symfony’nin Temel Özellikleri ve Avantajları
- Modüler Tasarım: Symfony'nin çekirdeği, yeniden kullanılabilir bileşenlerden oluşur. Geliştiriciler, ihtiyaçlarına göre bu bileşenleri seçerek hafif ya da kapsamlı uygulamalar inşa edebilirler.
- Yüksek Performans: Optimize mimarisi, verimli önbellekleme mekanizmaları ve PHP'nin en yeni özelliklerine verdiği destek ile mükemmel performans sunar.
- Güçlü Topluluk Desteği: Büyük bir geliştirici topluluğu, zengin üçüncü taraf paketleri (Bundle) ve kapsamlı dokümantasyon, karşılaşılan sorunlara hızlıca çözüm bulmayı kolaylaştırır.
- Esneklik: Üçüncü parti kütüphaneler ve eklentilerle kolayca entegre edilebilir, her ölçekten ve karmaşıklıktaki projeye uygun çözümler üretilebilir.
- Stabilite ve Sürdürülebilirlik: Güçlü kodlama standartları ve tasarım kalıpları ile geliştirilen uygulamaların test edilmesi, bakımı ve genişletilmesi kolaydır.
Symfony; küçük ölçekli API’lerden büyük kurumsal sistemlere kadar her türden Web projesi için uygundur.
ServBay ile Symfony Projesi Oluşturup Çalıştırmak
ServBay, Symfony projeleri için gerekli tüm ortamı — PHP sürümü, Composer, web sunucusu, çeşitli veri tabanları ve önbellek servisleri dahil — eksiksiz sağlar. Bu bölümde, ServBay’in özelliklerini kullanarak yeni bir Symfony projesinin nasıl oluşturulup yapılandırılacağını öğreneceksiniz.
Ön Koşullar
Başlamadan önce aşağıdakilerin hazır olduğundan emin olun:
- ServBay Kurulumunun Tamamlanması: macOS’te ServBay’i başarılı şekilde kurup başlattınız. Henüz kurmadıysanız ServBay Kurulum Rehberi'ni inceleyin.
- ServBay’in Sorunsuz Çalışması: ServBay’in temel servisleri (örn. Caddy ya da Apache ve ihtiyaç duyduğunuz veritabanları) çalışıyor olmalı.
- Temel Bilgi: PHP, Composer ve Symfony hakkında temel bilgiye sahipsiniz.
Symfony Projesi Oluşturma
ServBay, web sitesi projelerinizi /Applications/ServBay/www
klasöründe saklamanızı tavsiye eder. Böylece projeleriniz ServBay tarafından kolayca yönetilebilir ve tanınabilir.
Composer’ın Kullanıma Hazır Olduğundan Emin Olun
ServBay, kurulum sırasında Composer’ı entegre biçimde sunar ve ortam değişkenlerini otomatik ayarlar. Ayrıca kurulum gerektirmez. Composer’ın yüklü olup olmadığını terminalde
composer --version
komutunu girerek doğrulayabilirsiniz.Proje Dizini Oluşturun
Web sitesi kök klasöründe yeni bir Symfony projesi için dizin oluşturun:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
2Composer ile Symfony Projesi Oluşturun
Oluşturduğunuz klasöre girin ve Composer ile
website-skeleton
tabanlı Symfony projesi başlatın. Website skeleton, klasik Web uygulamaları için gerekli temel bağımlılıkları içerir.bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .
1
2Bu komut ile Composer, Symfony’nin ana dosyalarını ve tüm bağımlılıklarını mevcut klasöre yükleyecek.
Başlangıç Yapılandırması
Symfony projelerinin temel ayarları genellikle proje kökündeki .env
dosyasındaki ortam değişkenleri ile yönetilir.
Ortam Değişkenlerini (
.env
) DüzenleyinProje kökündeki
.env
dosyasını açın. Bu dosya, uygulamanın ortam ayarlarını (ör: veritabanı bağlantısı, uygulama anahtarı vb.) içerir. Gereksinimlerinize göre bu ayarları güncelleyin veya ekleyin.Özellikle aşağıdaki ayarların ServBay kurulumunuza uygun olduğundan emin olun:
dotenv# .env dosyası örneği APP_ENV=dev # Geliştirme ortamı APP_SECRET=your_secret_key # Güvenlik amacıyla benzersiz rastgele bir dize ile değiştirin # Veritabanı bağlantı bilgisi (örneğin MySQL için, detaylı açıklama aşağıda) # 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
8your_secret_key
kısmını güvenli, rastgele bir dizeyle değiştirin. Veritabanı kullanıcı adı ve şifresi için, ServBay’in varsayılan değerleri genellikleroot
vepassword
’dür (üretimde mutlaka değiştiriniz). Örnek veritabanı adımız olarakservbay_symfony_app
’i kullanacağız.
Web Sunucusu Yapılandırması (ServBay Sitesi)
Symfony projenizi tarayıcıdan erişilebilir kılmak için, ServBay’in “Site” özelliğiyle bir yerel sanal ana makine (vhost) tanımlamanız gerekir. Symfony'de web kök dizini public/
klasörüdür.
ServBay kontrol panelini açın, “Site” ayarlarına (veya eski sürümlerde “Ana Bilgisayar” ayarları) gidin, yeni bir site ekleyin:
- Ad (Name): Kolay hatırlanacak bir isim (örn:
My Symfony Dev Site
). - Alan Adı (Domain): Yerel geliştirme için domain belirleyin (örn:
servbay-symfony-test.local
). ServBay, otomatik olarak bu alan adını yerel makinanıza yönlendirecek. - Site Türü (Website Type):
PHP
'yi seçin. - PHP Sürümü (PHP Version): Symfony projenizle uyumlu bir PHP sürümü seçin; ServBay’in sunduğu son sürüm (örn.
8.3
) önerilir. - Site Kökü (Website Root): En önemli ayar budur. Symfony için mutlaka projenizin
public/
klasörüne işaret etmeli:/Applications/ServBay/www/servbay-symfony-app/public
.
Ayarları tamamladıktan sonra kaydedin ve değişiklikleri uygulayın. ServBay, Web sunucusu ayarlarını otomatik olarak yenileyecek ve SSL sertifikasını oluşturup güvenilir olarak ayarlayacak (Caddy veya Apache kullanılıyorsa). Böylece siteye doğrudan HTTPS ile erişebilirsiniz.
Detaylı ayar için ServBay İlk Sitenizi Ekleyin rehberine bakın.
Temel Örnek Kod Ekleme
Site ayarlarınızın doğru olup olmadığını test etmek için, kök adrese bir istek atıldığında ekrana bir mesaj döndüren örnek bir rota ve denetleyici oluşturalım.
Yönlendirme Ayarı (
config/routes.yaml
)config/routes.yaml
dosyasını açıp aşağıdaki gibi bir kök (/
) rota tanımlayın. Bu rota,index
adında bir denetleyici yöntemini gösterecek:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index
1
2
3
4Denetleyici Oluşturun (
src/Controller/DefaultController.php
)src/Controller/
klasöründeDefaultController.php
adında yeni bir PHP dosyası oluşturup, 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, kök adrese (
/
) erişildiğinde “Hello ServBay and Symfony!” yazısını döndüren basit bir denetleyici oluşturur.
Siteye Erişim
Web tarayıcınızı açıp ServBay’de tanımladığınız alan adına, örneğin https://servbay-symfony-test.local
adresine gidin. Tüm ayarlar doğruysa ekranda şu çıktıyı görmelisiniz:
Hello ServBay and Symfony!
Bu, Symfony projenizin ServBay web sunucusu üzerinden başarıyla çalıştığı anlamına gelir. ServBay, HTTPS yapılandırmasını otomatik yaptığı için siteye https://
ile erişmenizi öneririz.
Veritabanı ve Önbellekleme Örnekleri
Symfony, ilişkisel veritabanları için genellikle Doctrine ORM’i, önbellekleme ve NoSQL için ise Symfony Cache bileşenini kullanır. ServBay’in sunduğu çok sayıdaki veri tabanı servisi ve PHP eklentileriyle, bu teknolojileri kolayca projenize entegre edebilirsiniz.
İlişkisel Veritabanı Örneği (Doctrine ORM)
ServBay, MySQL ve PostgreSQL’i destekler. Şimdi, Symfony’de bu iki veritabanını nasıl yapılandırıp kullanabileceğinizi görelim.
Veritabanı Bağlantısı Yapılandırma
Proje kökündeki
.env
dosyasında ilgili satırı aktif edin ve düzenleyin.- MySQL için: Varsayılan kullanıcı:
root
, şifre:password
, port:3306
. Ayarınızı aşağıdaki gibi yapın:dotenv# .env DATABASE_URL="mysql://root:[email protected]:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2 - PostgreSQL için: Varsayılan kullanıcı:
root
, şifre:password
, port:5432
:dotenv# .env DATABASE_URL="postgresql://root:[email protected]:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
ServBay kontrol panelinden ilgili veritabanı servisini (MySQL veya PostgreSQL) başlattığınızdan emin olun.
- MySQL için: Varsayılan kullanıcı:
Veritabanı Oluşturma
Eğer
servbay_symfony_app
veritabanı henüz yoksa, ServBay’in sunduğu veri tabanı yönetim arayüzünden (phpMyAdmin veya pgAdmin üzerinden, ya da ServBay panelinden ulaşarak) elle oluşturabilir ya da Symfony komutunu kullanabilirsiniz:bashphp bin/console doctrine:database:create
1Entity (Varlık) ve Göç (Migration) Dosyalarını Oluşturun
Doctrine Entity'ler tabloyu temsil eder. Maker Bundle ile Entity ve migration dosyası oluşturmak çok kolaydır.
- Yeni Entity (Örneğin,
User
varlığı):bashGerekli alanlar için ör:php bin/console make:entity User
1name
(string) veemail
(string, unique=yes). - Migration Dosyası Oluşturun: Entity'deki değişikliklere göre migration dosyası yaratılır:bashBu komut, yeni tabloyu oluşturan SQL sorgularıyla
php bin/console make:migration
1src/Migrations
klasöründe bir dosya oluşturur.
- Yeni Entity (Örneğin,
Migration(s) Uygulayın
Migration dosyalarını veritabanınıza uygulamak için:
bashphp bin/console doctrine:migrations:migrate
1Veritabanı İşlem Örneği Ekleyin
src/Controller/DefaultController.php
dosyanıza, Doctrine ile veri ekleyip okuyan örnek metodlar ekleyin.EntityManagerInterface
’nin dependency injection yoluyla denetleyicinize aktarıldığından emin olun.Önce, denetleyici yapıcısına
EntityManagerInterface
parametresini 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; // EntityManagerInterface'i dahil edin use App\Entity\User; // User entity'si use Symfony\Component\HttpFoundation\JsonResponse; // JSON yanıtı için class DefaultController { private $entityManager; // Dependency injection ile EntityManagerInterface'i 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 rotalar ekleyin:yaml# config/routes.yaml # ... diğer rotalar ... mysql_add_user: path: /mysql-add-user # veya /pgsql-add-user (veritabanına göre değiştirin) controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # veya /pgsql-users controller: App\Controller\DefaultController::getUsers
1
2
3
4
5
6
7
8Son olarak,
src/Controller/DefaultController.php
dosyasına 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; // JsonResponse dahil edin 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ılıyor $user->setName('ServBay Demo User'); $user->setEmail('[email protected]'); // Persist et (kayıt için hazırla) $this->entityManager->persist($user); // İşlemi veritabanına kaydet $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 entity'lerini veritabanından çek $users = $this->entityManager->getRepository(User::class)->findAll(); // Sonucu diziye çevir $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // JSON 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Örnekleri Ziyaret Edin
https://servbay-symfony-test.local/add-user
adresini ziyaret ederek bir kullanıcı ekleyin.https://servbay-symfony-test.local/get-users
adresine giderek eklenen kullanıcıların listesini (JSON olarak) görebilirsiniz.
Önbellek ve NoSQL Veritabanı Örneği (Symfony Cache)
ServBay, Redis ve Memcached hizmetlerini entegre olarak ve ilgili PHP uzantılarıyla birlikte sunar. Symfony’nin Cache bileşeni üzerinden bu servisleri hemen kullanabilirsiniz.
Önbellek Bağlantılarını Ayarlayın
.env
dosyanızda önbellek servisinizin bağlantı adresini tanımlayın.- Memcached için: Varsayılan port
11211
’dir:dotenvServBay panelinden Memcached’i başlattığınızdan emin olun.# .env # ... diğer ayarlar ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3 - Redis için: Varsayılan port
6379
’dur:dotenvRedis servisini ServBay paneli üzerinden başlatın.# .env # ... diğer ayarlar ... CACHE_DSN=redis://127.0.0.1:6379 # Şifreli Redis gerekiyorsa (ServBay’de varsayılan şifre yok), aşağıdaki gibi ayarlayabilirsiniz: # CACHE_DSN=redis://:[email protected]:6379
1
2
3
4
5
- Memcached için: Varsayılan port
Cache Kullanım Örneği Ekleyin
src/Controller/DefaultController.php
’ya, Symfony Cache bileşeni ile Memcached ya da Redis’e nasıl erişileceğine dair örneği ekleyin.CacheInterface
’i dependency injection ile alın.İlk olarak, denetleyici yapıcısına
CacheInterface
’i 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; // CacheInterface dahil edin class DefaultController { private $entityManager; private $cache; // cache özelliği // Yapıcıda CacheInterface'i al public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; // atama } // ... 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
25Sonrasında,
config/routes.yaml
dosyanıza yeni rota ekleyin:yaml# config/routes.yaml # ... diğer rotalar ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample
1
2
3
4
5Denetleyicinizde şu metodu 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 dahil edin 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 bulunmazsa bu fonksiyon çalışır $item->expiresAfter(3600); // 1 saat geçerlilik // Örneğin, veritabanından karmaşık bir sorgu simüle ediyoruz $data = "Veri oluşturulma zamanı: " . date('Y-m-d H:i:s'); // Önbelleğe kaydedilecek değer return $data; }); // $cacheItem, önbellekten veya yeni oluşturulmuş 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Örneği Ziyaret Edin
https://servbay-symfony-test.local/cache-example
adresine gidin. İlk ziyaretinizde, içerik yeni oluşacak ve önbelleğe kaydedilecek. Sonraki ziyaretlerde, geçerlilik süresi bitene kadar veri doğrudan Memcached veya Redis üzerinden okunacak.
Sıkça Sorulan Sorular (SSS)
S: https://servbay-symfony-test.local
adresine gittiğimde sayfa bulunamadı veya 500 hatası alıyorum, ne yapmalıyım?
C:
- ServBay’in çalışır durumda ve site sunucusunun (Caddy veya Apache) da aktif olduğundan emin olun.
- ServBay’deki site yapılandırmasında, domain adının (
servbay-symfony-test.local
) ve “site kök dizini”nin (/Applications/ServBay/www/servbay-symfony-app/public
) doğru ayarlandığını kontrol edin. - Symfony log dosyanızı (
var/log/dev.log
) hataların detayları için gözden geçirin. - Proje kökünde
composer install
çalıştırarak tüm bağımlılıkların yüklü olduğundan emin olun. - PHP sürümünüzün Symfony projeniz ile uyumlu olduğuna bakın.
S: Veritabanına bağlanamıyorum, sebebi ne olabilir?
C:
- ServBay panelinden ilgili veritabanı servisinin (MySQL veya PostgreSQL) çalıştığını kontrol edin.
.env
dosyanızdakiDATABASE_URL
bilgisinin doğru (kullanıcı adı, şifre, host (127.0.0.1), port (MySQL 3306, PostgreSQL 5432), veritabanı adı) olduğundan emin olun.- Veritabanı kullanıcı adı ve şifresinin varsayılan ya da sizin belirlediğiniz şekilde girildiğine bakın.
servbay_symfony_app
adında bir veritabanının mevcut olduğunu kontrol edin.
S: php bin/console
komutu çalışmıyor?
C: Terminalde, mevcut klasörünüzün /Applications/ServBay/www/servbay-symfony-app
olduğuna ve ServBay’in PHP’sinin PATH’inizde olduğuna emin olun (ServBay kurulurken bu genellikle otomatik ayarlanır). which php
komutuyla ServBay’in PHP’sinin kullanıldığından emin olabilirsiniz.
Özet
Bu rehber ile ServBay’i kullanarak macOS üzerinde bir Symfony projesi nasıl oluşturulur, yapılandırılır ve çalıştırılır adım adım öğrendiniz. ServBay, Symfony geliştirmesi için gereken tüm temel bileşenleri (PHP, Composer, web sunucusu, veritabanı, önbellek) size eksiksiz sunarak, ortam ayarlarını kolaylaştırır ve hızlıca uygulama geliştirmeye başlayabilmenizi sağlar. Bu temel projeyi geliştirerek Symfony’nin daha fazla özelliğini keşfedebilir, ServBay’in sunduğu diğer yazılımları ve servisleri de değerlendirebilirsiniz.