Symfony : Bir bundle icinde Service olusturmak
Bundle icinde varolan servisler uygulamanin configleri icindeki service.yaml icinde tanimlanmazlar. Bu yazi bundle icinde bir servisi nasil olusturup kullanabileceginizi ve dizin yapisini aciklayacak.
Extension Class olusturmak
Bunun icin dependency injectin ( DI ) uzerinde bir bagimlilik tanimlamaniz gerekiyor. Normal sartlarda kurallara uymaniz onemli;
- Extension `DependencyInjection`ile biten bir namespace icinde yer almali
- Symfony\Component\DependencyInjection\Extension\ExtensionInterface ile yazilmis Symfony\Component\DependencyInjection\Extension\Extension sinifini extend ederek olusturulmali.
- AcmeHelloBundle için olanı AcmeHelloExtension gibi adlandırılmali
Ornek;
Extension Class icin Manuel Kayit
Yukaridaki kurallara uymadiginizda extension kaydini siz yapmalisiniz. Bunu icin Bundle::getContainerExtension() methodu su sekilde gecersiz kilinmalidir;
Ayrica extension class bu kurallara uyumadigi zaman getAlias methodunu da override etmelisiniz. Bu sekilde DI dogru methodu donderebilir. DI alias, container icindeki ismi belirtmek icin kullanilan addir. Varsayılan olarak, bu, Uzantı sonekini kaldırarak ve sınıf adını alt çizgilere dönüştürerek yapılır.
AcmeHelloExtension
icin acme_hello
gibi.
load()
Methodunun kullanimi
Load () yönteminde, bu extension ilgili tüm servisler ve parametreler yüklenecektir. Bu method kapsayici orneginin gercegini degil instance halini alir. Bu container sadece gercek containera ait parametrelere sahiptir. Yukleme gerceklesince servis ve parametreler ile gercek container ve instance service parametreleri birlestirilir.
Load methodunda php ile servis tanimlari kaydedilebilir ama bunlari yaml benzeri bir config dosyasina koymak daha iyi fikirdir.
Resources/config icindeki services.xml icin ornek;
XMLFileLoader disinda YamlFileLoader ve PhpFileLoader vardir.
Servis ayarlarini degistirmek icin yapilandirma
Extension ayrica bundle icin yapilandirmayi belirler. Detaylar icin https://symfony.com/doc/current/bundles/configuration.html
Classlari derlemeye eklemek
Bundlelar, genel performansı iyileştirmek için uygulama önbelleğini oluştururken derlenmeleri için Symfony’ye hangi sınıflarının ek açıklamalar içerdiği konusunda ipucu verebilir. Define the list of annotated classes to compile in the addAnnotatedClassesToCompile()
method:
Not : Bazı classlar diğer classlardan extend edilirse, tüm parent ogeler otomatik olarak derlenecek classlar listesine dahil edilir.
Patternler, Composer tarafından oluşturulan class haritasi kullanılarak gerçek class namespace adreslerine dönüştürülür. Bu yuzden composer dumpautoload calistirarak class haritasina bunlari dahil etmelisiniz.
Dikkat : Bu teknik siniflarda __DIR__ ve __FILE__ sabitleri ile kullanilamaz. Cunku bu degerler classes.php dosyasi yuklenirken degisecektir.