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.

versiyon: 3.x