Nette Documentation Preview

syntax
Nette Bootstrap
***************

.[perex]
Nette'nin bireysel bileşenlerini yapılandırma dosyaları kullanarak ayarlıyoruz. Bu dosyaların nasıl yükleneceğini göstereceğiz.

.[tip]
Eğer tüm framework'ü kullanıyorsanız, başka bir şey yapmanıza gerek yoktur. Projenizde yapılandırma dosyaları için önceden hazırlanmış bir `config/` dizini bulunur ve bunların yüklenmesinden [uygulama yükleyicisi |application:bootstrapping#DI Konteyner Yapılandırması] sorumludur. Bu makale, yalnızca bir Nette kütüphanesi kullanan ve yapılandırma dosyalarının olanaklarından yararlanmak isteyen kullanıcılar içindir.

Yapılandırma dosyaları genellikle [NEON formatında|neon:format] yazılır ve en iyi şekilde [destekleyen düzenleyicilerde |best-practices:editors-and-tools#IDE Editörü] düzenlenir. Bunları, nesnelerin **nasıl oluşturulacağı ve yapılandırılacağı** konusunda talimatlar olarak düşünebiliriz. Yani, yapılandırmanın yüklenmesinin sonucu, istek üzerine kullanmak istediğimiz diğer nesneleri (örneğin, veritabanı bağlantısı vb.) oluşturacak olan fabrika olarak adlandırılan bir nesne olacaktır.

Bu fabrikaya aynı zamanda *dependency injection konteyneri* (DI konteyneri) denir ve ayrıntılarla ilgileniyorsanız, [dependency injection |dependency-injection:] bölümünü okuyun.

Yapılandırmanın yüklenmesi ve konteynerin oluşturulması [api:Nette\Bootstrap\Configurator] sınıfı tarafından gerçekleştirilir, bu nedenle önce `nette/bootstrap` paketini kuracağız:

```shell
composer require nette/bootstrap
```

Ve `Configurator` sınıfının bir örneğini oluşturacağız. Oluşturulan DI konteyneri diske önbelleğe alınacağından, kaydedileceği dizinin yolunu ayarlamak gerekir:

```php
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
```

Linux veya macOS'ta, `temp/` dizinine [yazma izinleri |nette:troubleshooting#Dizin İzinlerini Ayarlama] ayarlayın.

Ve yapılandırma dosyalarına geliyoruz. Bunları `addConfig()` kullanarak yükleyeceğiz:

```php
$configurator->addConfig(__DIR__ . '/database.neon');
```

Daha fazla yapılandırma dosyası eklemek istiyorsak, `addConfig()` fonksiyonunu birden çok kez çağırabiliriz. Dosyalarda aynı anahtarlara sahip öğeler görünürse, bunlar üzerine yazılır (veya diziler durumunda [birleştirilir |dependency-injection:configuration#Birleştirme]). Daha sonra eklenen dosya, öncekinden daha yüksek önceliğe sahiptir.

Son adım DI konteynerini oluşturmaktır:

```php
$container = $configurator->createContainer();
```

Ve bu bize istenen nesneleri oluşturacaktır. Örneğin, [Nette Database|database:configuration] için yapılandırma kullanıyorsanız, veritabanı bağlantıları oluşturmasını isteyebilirsiniz:

```php
$db = $container->getByType(Nette\Database\Connection::class);
// veya
$explorer = $container->getByType(Nette\Database\Explorer::class);
// veya birden fazla bağlantı oluştururken
$db = $container->getByName('database.main.connection');
```

Ve şimdi veritabanıyla çalışabilirsiniz!


Geliştirme vs Üretim Modu
-------------------------

Geliştirme modunda, konteyner yapılandırma dosyaları her değiştiğinde otomatik olarak güncellenir. Üretim modunda, yalnızca bir kez oluşturulur ve değişiklikler kontrol edilmez. Bu nedenle geliştirme modu, programcının maksimum rahatlığına odaklanırken, üretim modu performansa ve canlı dağıtıma odaklanır.

Mod seçimi otomatik algılama ile yapılır, bu nedenle genellikle bir şey yapılandırmaya veya manuel olarak değiştirmeye gerek yoktur. Uygulama localhost'ta (yani IP adresi `127.0.0.1` veya `::1`) çalıştırılıyorsa ve bir proxy mevcut değilse (yani HTTP başlığı yoksa) mod geliştirme modudur. Aksi takdirde, üretim modunda çalışır.

Geliştirme modunu diğer durumlarda da etkinleştirmek istiyorsak, örneğin belirli bir IP adresinden erişen programcılar için `setDebugMode()` kullanırız:

```php
$configurator->setDebugMode('23.75.345.200');
// IP adresleri dizisi de belirtilebilir
```

Kesinlikle bir IP adresini bir çerezle birleştirmenizi öneririz. `nette-debug` çerezine gizli bir belirteç, örneğin `secret1234` kaydedeceğiz ve bu şekilde belirli bir IP adresinden erişen ve aynı zamanda çerezde belirtilen belirtece sahip olan programcılar için geliştirme modunu etkinleştireceğiz:

```php
$configurator->setDebugMode('secret1234@23.75.345.200');
```

Geliştirme modunu localhost için bile tamamen devre dışı bırakabiliriz:

```php
$configurator->setDebugMode(false);
```


Parametreler
------------

Yapılandırma dosyalarında, [`parameters` bölümünde |dependency-injection:configuration#Parametreler] tanımlanan parametreleri de kullanabilirsiniz.

Bunlar ayrıca `addDynamicParameters()` yöntemi kullanılarak dışarıdan da eklenebilir:

```php
$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
```

`projectId` parametresine yapılandırmada `%projectId%` yazılarak başvurulabilir.


{{leftbar: nette:@menu-topics}}

Nette Bootstrap

Nette'nin bireysel bileşenlerini yapılandırma dosyaları kullanarak ayarlıyoruz. Bu dosyaların nasıl yükleneceğini göstereceğiz.

Eğer tüm framework'ü kullanıyorsanız, başka bir şey yapmanıza gerek yoktur. Projenizde yapılandırma dosyaları için önceden hazırlanmış bir config/ dizini bulunur ve bunların yüklenmesinden uygulama yükleyicisi sorumludur. Bu makale, yalnızca bir Nette kütüphanesi kullanan ve yapılandırma dosyalarının olanaklarından yararlanmak isteyen kullanıcılar içindir.

Yapılandırma dosyaları genellikle NEON formatında yazılır ve en iyi şekilde destekleyen düzenleyicilerde düzenlenir. Bunları, nesnelerin nasıl oluşturulacağı ve yapılandırılacağı konusunda talimatlar olarak düşünebiliriz. Yani, yapılandırmanın yüklenmesinin sonucu, istek üzerine kullanmak istediğimiz diğer nesneleri (örneğin, veritabanı bağlantısı vb.) oluşturacak olan fabrika olarak adlandırılan bir nesne olacaktır.

Bu fabrikaya aynı zamanda dependency injection konteyneri (DI konteyneri) denir ve ayrıntılarla ilgileniyorsanız, dependency injection bölümünü okuyun.

Yapılandırmanın yüklenmesi ve konteynerin oluşturulması Nette\Bootstrap\Configurator sınıfı tarafından gerçekleştirilir, bu nedenle önce nette/bootstrap paketini kuracağız:

composer require nette/bootstrap

Ve Configurator sınıfının bir örneğini oluşturacağız. Oluşturulan DI konteyneri diske önbelleğe alınacağından, kaydedileceği dizinin yolunu ayarlamak gerekir:

$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');

Linux veya macOS'ta, temp/ dizinine yazma izinleri ayarlayın.

Ve yapılandırma dosyalarına geliyoruz. Bunları addConfig() kullanarak yükleyeceğiz:

$configurator->addConfig(__DIR__ . '/database.neon');

Daha fazla yapılandırma dosyası eklemek istiyorsak, addConfig() fonksiyonunu birden çok kez çağırabiliriz. Dosyalarda aynı anahtarlara sahip öğeler görünürse, bunlar üzerine yazılır (veya diziler durumunda birleştirilir). Daha sonra eklenen dosya, öncekinden daha yüksek önceliğe sahiptir.

Son adım DI konteynerini oluşturmaktır:

$container = $configurator->createContainer();

Ve bu bize istenen nesneleri oluşturacaktır. Örneğin, Nette Database için yapılandırma kullanıyorsanız, veritabanı bağlantıları oluşturmasını isteyebilirsiniz:

$db = $container->getByType(Nette\Database\Connection::class);
// veya
$explorer = $container->getByType(Nette\Database\Explorer::class);
// veya birden fazla bağlantı oluştururken
$db = $container->getByName('database.main.connection');

Ve şimdi veritabanıyla çalışabilirsiniz!

Geliştirme vs Üretim Modu

Geliştirme modunda, konteyner yapılandırma dosyaları her değiştiğinde otomatik olarak güncellenir. Üretim modunda, yalnızca bir kez oluşturulur ve değişiklikler kontrol edilmez. Bu nedenle geliştirme modu, programcının maksimum rahatlığına odaklanırken, üretim modu performansa ve canlı dağıtıma odaklanır.

Mod seçimi otomatik algılama ile yapılır, bu nedenle genellikle bir şey yapılandırmaya veya manuel olarak değiştirmeye gerek yoktur. Uygulama localhost'ta (yani IP adresi 127.0.0.1 veya ::1) çalıştırılıyorsa ve bir proxy mevcut değilse (yani HTTP başlığı yoksa) mod geliştirme modudur. Aksi takdirde, üretim modunda çalışır.

Geliştirme modunu diğer durumlarda da etkinleştirmek istiyorsak, örneğin belirli bir IP adresinden erişen programcılar için setDebugMode() kullanırız:

$configurator->setDebugMode('23.75.345.200');
// IP adresleri dizisi de belirtilebilir

Kesinlikle bir IP adresini bir çerezle birleştirmenizi öneririz. nette-debug çerezine gizli bir belirteç, örneğin secret1234 kaydedeceğiz ve bu şekilde belirli bir IP adresinden erişen ve aynı zamanda çerezde belirtilen belirtece sahip olan programcılar için geliştirme modunu etkinleştireceğiz:

$configurator->setDebugMode('secret1234@23.75.345.200');

Geliştirme modunu localhost için bile tamamen devre dışı bırakabiliriz:

$configurator->setDebugMode(false);

Parametreler

Yapılandırma dosyalarında, parameters bölümünde tanımlanan parametreleri de kullanabilirsiniz.

Bunlar ayrıca addDynamicParameters() yöntemi kullanılarak dışarıdan da eklenebilir:

$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);

projectId parametresine yapılandırmada %projectId% yazılarak başvurulabilir.