Symfony : Bundle icin kolay yapilandirma yapmak
Ana ayar dosyalarini acarsaniz ( config/packages ) bir cok farkli dosya goreceksiniz. ( framework.yaml, twig.yaml vb. ) Her bir ayar dosyasi spesifik olarak birer bundle demektir. Buradaki ayarlar genel kapsamli ayarlar olup bundle kendi ayarlarini alt seviyede yapar.
Ornegin FramworkBundle form entegrasyon ozelligini acmak icin;
framework:
form: true
Bundle Extension Kullanmak
Twitter entegrasyonu icin bir bundle yazdigimizi dusunelim. Kullanici adi icin soyle bir ornek verebiliriz;
# config/packages/acme_social.yaml
acme_social:
twitter:
client_id: 123
client_secret: your_secret
Temel fikir bundle kullanicisinin temel ayarlari yapabilmesini saglamaktir. Bundle gelistiricisi bu ayarlari gerekli yerlerde kullanir.
AcmeSocialBundle icin ana anahtar acme_social otomatik olarak Symfony tarafindan bulunur. Snake case seklinde yazilmasi yeterlidir.
Bir bundle bir extension classa sahipse bu durumda service container icindeki bir parametreyi gecersiz kilmamalisiniz. Burada onemli olan extension’in ihtiyac duyacagi ayarlarin yapilabilir olmasidir.
Detaylar : https://symfony.com/doc/current/configuration/using_parameters_in_dic.html
$configs
dizisi
Dogru sekilde bir extension olusturdugunuzu varsayalim.
( https://symfony.com/doc/current/bundles/extension.html adresinde anlatildigi gibi )
Bir bundle kullanicisi config dosyasina acme_social gibi bir anahtar eklediginde symfony otomatik olarak extension load() methoduna bu ayarlari gonderir.
load () yönteminize iletilen dizi şu şekilde görünecektir:
Birden fazla config dosyasinda bu ayarlar sira ile birlestirilip gelir.
[
// values from config/packages/acme_social.yaml
[
'twitter' => [
'client_id' => 123,
'client_secret' => 'your_secret',
],
],
// values from config/packages/dev/acme_social.yaml
[
'twitter' => [
'client_id' => 456,
],
],
]
Siralama hangi dosyanin once ayarlara dahil olduguna baglidir.
Symfony bu ayarlar yanlis yapildiginda kullaniciya hata gonderileri yapabilir. Nasil calistigina dair ornek;
Bu class artık ayarlari birleştirmek ve doğrulamayı zorlamak için load () yönteminizde kullanılabilir (örneğin, ek bir seçenek geçilirse, bir exception atılır):
processConfiguration()
methodu tanimlanan config tree yapisinin aynisi config gonderilmesi icin zorlayici olacaktir.
Simdi bundle icin bir servis ayar dosyasi oldugunu varsayalim.
Servis icinde default servis ayarlarini kullanicinin ayarlari ile degistirmek icin;
Bunu her serviste processConfiguration()
ile yukleyerek yapmak yerine soyle bundle genelini kapsayacak sekilde yapabilirsiniz.
Bu class configrasyon instance nesnesi icin getConfigration methodunu cagirir.
Coklu bundle yapilandirmasi https://symfony.com/doc/current/bundles/prepend_extension.html