DI Konteynerini Yapılandırma
Nette DI konteyneri için yapılandırma seçeneklerine genel bakış.
Yapılandırma dosyası
Nette DI konteynerinin yapılandırma dosyaları kullanılarak kontrol edilmesi kolaydır. Genellikle NEON formatında yazılırlar. Düzenleme için bu formatı destekleyen editörler kullanmanızı öneririz.
decorator: Dekoratör
di: DI Konteyner
extensions: Ek DI uzantılarını yükleyin
includes: Including files
parameters: Parameters
search: Otomatik hizmet kaydı
services: Services
%
, you must escape it by doubling it to %%
karakterini içeren bir dize
yazmak için.
Parametreler
Daha sonra hizmet tanımlarının bir parçası olarak kullanılabilecek parametreler tanımlayabilirsiniz. Bu, daha düzenli olarak değiştirmek isteyeceğiniz değerleri ayırmanıza yardımcı olabilir.
Herhangi bir yapılandırma dosyasının başka bir yerinde %foo%
aracılığıyla foo
parametresine
başvurabilirsiniz. Ayrıca '%wwwDir%/images'
gibi dizgilerin içinde de kullanılabilirler.
Parametrelerin sadece string olması gerekmez, dizi değerleri de olabilirler:
Tek tuşa %mailer.user%
olarak başvurabilirsiniz.
Kodunuzda, örneğin sınıfınızda herhangi bir parametrenin değerini almanız gerekiyorsa, o zaman bu sınıfa geçirin. Örneğin, yapıcıda. Sınıfların parametre değerlerini sorgulayabileceği global bir yapılandırma nesnesi yoktur. Bu, bağımlılık enjeksiyonu ilkesine aykırı olacaktır.
Hizmetler
Ayrı bir bölüme bakınız.
Dekoratör
Belirli bir türdeki tüm hizmetleri toplu olarak nasıl düzenleyebilirim? Belirli bir ortak atadan miras kalan tüm sunucular için belirli bir yöntemi çağırmanız mı gerekiyor? İşte dekoratörün geldiği yer burasıdır.
Dekoratör ayrıca etiketleri ayarlamak veya enjeksiyon modunu açmak için de kullanılabilir.
DI
DI konteynerinin teknik ayarları.
Tembel Hizmetler
lazy: true
ayarı, hizmetlerin tembel (ertelenmiş) olarak oluşturulmasını sağlar. Bu, hizmetlerin DI
konteynerinden talep edildiğinde değil, yalnızca ilk kullanımlarında oluşturulduğu anlamına gelir. Bu, uygulama
başlangıcını hızlandırabilir ve yalnızca belirli bir istek için gereken hizmetler oluşturulduğundan bellek
kullanımını azaltabilir.
Belirli bir hizmet için tembel oluşturma ayarlanabilir.
Tembel nesneler sadece kullanıcı tanımlı sınıflar için kullanılabilir, dahili PHP sınıfları için kullanılamaz. PHP 8.4 veya daha yenisini gerektirir.
Meta Veri Aktarımı
DI konteyner sınıfı ayrıca çok fazla meta veri içerir. Meta veri dışa aktarımını azaltarak bunu azaltabilirsiniz.
$container->getParameters()
dizisini kullanmıyorsanız, parametre dışa aktarımını devre dışı
bırakabilirsiniz. Ayrıca, yalnızca $container->findByTag(...)
yöntemini kullanarak hizmet aldığınız
etiketleri dışa aktarabilirsiniz. Yöntemi hiç çağırmazsanız, false
ile etiket dışa aktarımını tamamen
devre dışı bırakabilirsiniz.
Kullandığınız sınıfları $container->getByType()
yöntemine parametre olarak belirterek otomatik kablolama için meta verileri önemli ölçüde azaltabilirsiniz. Ve yine, yöntemi hiç
çağırmazsanız (veya Nette\Application\Application
adresini almak için yalnızca bootstrap içinde çağırırsanız), false
ile dışa
aktarmayı tamamen devre dışı bırakabilirsiniz.
Uzantılar
Diğer DI uzantılarının kaydı. Bu şekilde, örneğin Dibi\Bridges\Nette\DibiExtension22
DI uzantısını
dibi
adı altında ekleriz:
Daha sonra dibi
adlı bölümde yapılandırıyoruz:
Parametreli bir uzantı sınıfı da ekleyebilirsiniz:
Dosyalar Dahil
Ek yapılandırma dosyaları includes
bölümüne eklenebilir:
parameters.php
adı bir yazım hatası değildir, yapılandırma bir dizi olarak döndüren bir PHP dosyasına da
yazılabilir:
Aynı anahtarlara sahip öğeler yapılandırma dosyalarında görünürse, diziler söz konusu olduğunda bunların üzerine yazılır veya birleştirilir. Daha sonra dahil edilen dosyanın bir öncekinden daha yüksek
önceliği vardır. includes
bölümünün listelendiği dosya, içine dahil edilen dosyalardan daha yüksek
önceliğe sahiptir.
Arama
Hizmetlerin DI konteynerine otomatik olarak eklenmesi, çalışmayı son derece keyifli hale getirir. Nette, kapsayıcıya otomatik olarak sunucuları ekler, ancak diğer sınıfları kolayca ekleyebilirsiniz.
Sınıfların hangi dizinlerde (ve alt dizinlerde) aranması gerektiğini belirtmeniz yeterlidir:
Ancak genellikle, tüm sınıfları ve arayüzleri eklemek istemeyiz, bu yüzden onları filtreleyebiliriz:
Ya da aşağıdaki sınıflardan en az birini miras alan veya uygulayan sınıfları seçebiliriz:
Ayrıca negatif kurallar da tanımlayabilirsiniz, yani sınıf adı maskeleri veya ataları ve bunlara uymaları halinde hizmet DI konteynerine eklenmeyecektir:
Eklenen hizmetler için etiketler belirlenebilir:
Birleştirme
Aynı anahtarlara sahip öğeler daha fazla yapılandırma dosyasında görünüyorsa, diziler söz konusu olduğunda bunların üzerine yazılır veya birleştirilir. Daha sonra dahil edilen dosya daha yüksek önceliğe sahiptir.
config1.neon | config2.neon | Sonuç |
---|---|---|
Belirli bir dizinin birleştirilmesini önlemek için dizinin adından hemen sonra ünlem işareti kullanın:
config1.neon | config2.neon | Sonuç |
---|---|---|