-
Notifications
You must be signed in to change notification settings - Fork 0
Başlangıç
Merhaba, bu projemde basit bir blog yazacağım . ben symfony'nin framework-bundle(Çerçeve Paketi) kurdum. Bu, web uygulamaları geliştirmek için öneriliyor ve web geliştirme için gereken bileşenleri dahil ediyor. Ayrıyeten skeleton
var o da daha az bileşen ile yüklü geliyor. Örnek verecek olursam Form
kullanacaksınız, symfony/form
paketini yüklemeniz gerekecektir ve bunun benzeri gibi paketler yüklemeniz gerekecektir. Bu nedenle daha hızlı bir başlnafıç için bunu seçtim.
Kurulum için symfony-cli
kullanacağım, siz isterseniz composer kullanabilirsiniz.
symfony new blog --full
blog
projemin adı, eğer o isimde bir dizin varsa projeyi oluşturmayacaktır.
--full
bayrağı da gerekli olan tüm bileşenleri kuracak. Eğer --full
bayrağını koymazsanız size sadece iskeleti kurar.
symfony-cli
ile aynı şekilde kurulumu yapar arada fark yok.
composer create-project symfony website-skeleton blog
bin
dizini konsol ile işlemler yaptığımızda, kullanılan yerdir. Örnek controller
oluşturmamız gerekiyor bunun içi şu komutu çalıştırıyoruz.
php bin/console make:controller
config
dizini içerisinde yapılandırmalarımız, rotalar vb. framework için tüm yapılandırmaların bulunduğu yerdir.
migrations
klasörü, oluşturacağımız migration dosyalarını içerisinde tutar.
public
dizini içinde index.php
, js
, css
ve fotoğraflarımızı
koyacağımız yerdir. Dışarıya açık tek dizindir.
src
dizini içinde asıl kodlarımız olacak. Entity, forms, controller vb. dosyalarımız içinde olacak. En çok içinde çalışacağımız dizinlerden birisidir.
templates
dizini içinde şablonlarımız olacak. Diğer deyimle view
larımız.
tests
dizinide, testlerimiz yazabileceğimiz dizindir. Test yazarsanız kullanırsınız.
translations
dizini, eğer uygulamanızda çoklu dil kullanırsanız bu dizin içerisinden dil ile alakalı eklemeleri yaparsınız.
var
dizini, framework tarafından kullanılır. İçinde, session
, cache
, log
gibi dosyaları tutacaktır.
vendor
dizinide composer
ile kurulan paketlerin bulunduğu yerdir.
Artık başlamaya hazırız, aklınıza takılan birşeyler varsa soru sorun!
symfony-cli kurmanız gereklidir(Resmi belgelerde, console üzerinden başlatmayı bulamadım)
symfony server:start -d
-d
bayrağı, arkaplanda sunucuyu çalıştırır isterseniz -d
bayrağını koymayın.
Yerel sunucumuz http://127.0.0.1:8000 adresinde varsayılan olarak başlıyor.
-d
bayrağı ile başlattıysanız bu komut ile durdurabilirsiniz.
symfony server:stop
env
dosyasını tanıyalım:
DATABASE_URL # veritabanı sunucusu bağlantı bilgileri symfony'de url hazır geliyor siz sadece bilgileri doldurursunuz.
MAILER_DSN # Uygulamanızda e-posta servisi kullanacaksanız buraya gereken yapılandırmayı eklemeniz gerekli.
APP_ENV # Uygulama durumu, `production` ve `dev` eğer geliştirmedeyseniz `dev` olarak bırakmalısınız.
APP_SECRET # Framework'un şifrelenmesi için, framework tarafından üretilen anahtar.
Symfony, bize router için 5 kullanım sunuyor.
- annotations
- attributes(Controller oluşturunca methodda tanımlı olarak gelir)
- yaml(5.2'den sonra varsayılan olarak geliyor)
- xml => Anlatmaycam burayı
- php
annotations
(Açıklamalar), methodun üzerinde yazılır.
Basit bir örnek:
/**
* @Route("/", name="home")
*/
public function index(): Response
{
return "Home";
}
@Route()
içine koşullar ve parametreler yazılır. Tabii sadece 2 parametresi yok diğer yöntemlerde kullanılan parametrelere de izin veriliyor.
Paramatre ile örneklendirip bu başlığı bitirecem.
Örnek:
/**
* @Route("/delete/post/{id}", name="post.delete", methods={"DELETE"}, requirements={"id"="\d+"})
* Burada /delete/post/{id}, gönderi id'sini, sadece tamsayı(regexp) ve HTTP POST yöntemi ile kabul edeceğimizi belirttik.
*/
public function index(int $id): Response
{
return "Home";
}
attributes
(Nitelikler), PHP 8 ile gelen yeni bir özellik, symfony'de boş durmayıp bunu Rota olarak kullanabilmemiz için bize sunmuş.
Kullanıma geçelim:
#[Route('/delete/post/{id}', name: 'post.delete', methods: ['DELETE'], requirements: ['id' => '\d+'])]
public function index(int $id): Response
{
return "Home";
}
Symfony attributes'leri öneriyor.
yaml
, symfony 5.2'den sonra varsayılan olarak yüklenir. Yani php ve xml'i kendiniz yapılandırmanız gerekli, Yapılandırmayı bölümün sonunda anlatmış olacağım.
routes.yaml
, config/routes.yaml
içerisinde bulunuyor. İlk kurulumda dosyayı açtığımızda:
1 index:
2 path: /
3 controller: App\Controller\DefaultController::index
Bizi bu metin karşılıyor. 1. satırdaki index, rotaya verilen isim(benzersiz olmalı aksi takdirde sorunlar çıkar) , 2. satırda uri'i işaret ediyor. 3. ise aksiyon yani controller'i en sonda ise ::
koyarak yöntem adınız yazıyoruz.
post.delete:
path: /delete/post/{id}'
controller: App\Controller\BlogController::list
requirements:
page: '\d+'
routes.php
, config/routes.php
içerisinde.
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
return function(RoutingConfigurator $route){
$route->add('post.delete', '/delete/post/{id}')
->controller([\App\Controller\BlogController::class, 'index'])
->methods(['DELETE'])
->requirements([
'id' => '\d+'
])
;
};
Tüm yöntemlerde yaptığım işlemler aynıdır. ARTIK HANGİSİNİ KULLANMAK İSTERSENİZ SİZE KALMIŞ. BEN PHP İLE DEVAM EDECEĞİM.
Rota dosyalarının yapılandırmasını ve yüklenmesini anlatacağım.
src/Kernel.php
dosyasından ayarlamalar yapılıyor.
protected function configureRoutes(RoutingConfigurator $routes): void
{
$routes->import('../config/{routes}/'.$this->environment.'/*.yaml');
// Burdan dosya adını yazın
$routes->import('../config/{routes}/*.php');
// burdaki dosya ise
if (is_file(\dirname(__DIR__).'/config/routes.php')) {
// bunu yükler
$routes->import('../config/{routes}.php');
} else {
// Değilse bunu yükleyecek
$routes->import('../config/{routes}.yaml');
}
}