Nette Bootstrap
Tek tek Nette bileşenleri yapılandırma dosyalarıyla ayarlanır. Bu dosyaların nasıl yükleneceğini göstereceğiz.
Framework'ün tamamını kullanıyorsanız başka bir şey yapmanıza gerek yok. Projenizde yapılandırma
dosyaları için hazır bir config/ dizini vardır ve onların yüklenmesini uygulama yükleyicisi üstlenir.
Bu yazı, yalnızca tek bir Nette kütüphanesini kullanan ve yapılandırma dosyalarından yararlanmak isteyen kullanıcılar
içindir.
Yapılandırma dosyaları genellikle NEON biçiminde yazılır ve onları biçimi destekleyen düzenleyicilerde düzenlemek en iyisidir. Onları, nesnelerin nasıl oluşturulacağı ve yapılandırılacağı yönergeleri olarak düşünebilirsiniz. Böylece bir yapılandırmayı yüklemenin sonucu, kullanmak istediğiniz diğer nesneleri istendiğinde oluşturan bir nesne olan factory olacaktır. Örneğin bir veritabanı bağlantısı vb.
Bu factory'ye dependency injection container (DI container) da denir ve ayrıntılarla ilgileniyorsanız dependency injection bölümünü okuyun.
Yapılandırmanın yüklenmesini ve container'ın oluşturulmasını Nette\Bootstrap\Configurator sınıfı
üstlenir, dolayısıyla önce onun nette/bootstrap paketini kuralım:
composer require nette/bootstrap
Ve Configurator sınıfının bir örneğini oluşturalım. Üretilen DI container diske önbelleklendiğinden,
onun kaydedileceği dizinin yolunu ayarlamanız gerekir:
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
Linux ya da macOS'ta temp/ dizini için yazma izinlerini ayarlayın.
Şimdi yapılandırma dosyalarının kendisine geliyoruz. Onları addConfig() ile yükleriz:
$configurator->addConfig(__DIR__ . '/database.neon');
Daha fazla yapılandırma dosyası eklemek isterseniz, addConfig() fonksiyonunu birden çok kez
çağırabilirsiniz. Dosyalarda aynı anahtarlara sahip öğeler bulunursa, onların üzerine yazılır (diziler söz konusuysa birleştirilir). Sonradan eklenen dosyanın
önceliği öncekinden yüksektir.
Son adım DI container'ı oluşturmaktır:
$container = $configurator->createContainer();
Ve bu bizim için istenen nesneleri oluşturacak. Örneğin Nette Database için yapılandırmayı kullanıyorsanız, ondan veritabanı bağlantıları oluşturmasını isteyebilirsiniz:
$db = $container->getByType(Nette\Database\Connection::class);
// ya da
$explorer = $container->getByType(Nette\Database\Explorer::class);
// ya da birden çok bağlantı oluşturulurken
$db = $container->getByName('database.main.connection');
Ve artık veritabanıyla çalışabilirsiniz!
Geliştirme Kipi ile Üretim Kipi
Geliştirme kipinde, yapılandırma dosyaları her değiştiğinde container otomatik güncellenir. Üretim kipinde yalnızca bir kez üretilir ve değişiklikler denetlenmez. Böylece geliştirme kipi programcının en üst düzey rahatlığını hedeflerken, üretim kipi başarıma ve üretime dağıtıma odaklanır.
Kip seçimi otomatik algılamayla yapılır, dolayısıyla genellikle hiçbir şeyi yapılandırmaya ya da elle değiştirmeye
gerek yoktur. Uygulama localhost üzerinde çalışıyorsa (yani IP adresi 127.0.0.1 ya da ::1 ise) ve
hiçbir vekil sunucu (yani onun HTTP başlığı) yoksa kip geliştirmedir. Aksi hâlde üretim kipinde çalışır.
Geliştirme kipini başka durumlarda da, örneğin belirli bir IP adresinden erişen programcılar için etkinleştirmek
istersek setDebugMode() kullanırız:
$configurator->setDebugMode('23.75.345.200');
// bir IP adresleri dizisi de belirtilebilir
IP adresini bir çerezle birleştirmenizi güçlü biçimde öneririz. nette-debug çerezinde gizli bir token
saklayın, örneğin secret1234. Böylece geliştirme kipini, belirli bir IP adresinden erişen ve çerezinde anılan
token da bulunan programcılar için etkinleştirirsiniz:
$configurator->setDebugMode('secret1234@23.75.345.200');
Geliştirme kipini, localhost için bile tümüyle kapatabiliriz:
$configurator->setDebugMode(false);
Parametreler
Yapılandırma dosyalarında, parameters bölümünde
tanımlanan parametreleri de kullanabilirsiniz.
Onlar addDynamicParameters() metoduyla dışarıdan da eklenebilir:
$configurator->addDynamicParameters([
'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
remoteIp parametresine yapılandırmada %remoteIp% yazımıyla başvurulabilir.
Daha yeni bir sürüme yükseltiyorsanız yükseltme sayfasına bakın.