Uygulama yapılandırması

Nette Application'ın yapılandırma seçeneklerine genel bakış.

Application

application:
	# Tracy BlueScreen'de "Nette Application" paneli gösterilsin mi?
	debugger: ...           # (bool) Tracy varsa etkin

	# üretimde istisnaları her zaman error-presenter işler;
	# bu seçenek yalnızca aynı davranışı geliştirme modunda da açar
	catchExceptions: ...    # (bool) varsayılan false - yani geliştirmede kapalı, üretimde her zaman açık

	# error-presenter'ın adı
	errorPresenter: Error   # (string|array) varsayılan 'Nette:Error'

	# presenter'lar ve eylemler için takma adlar tanımlar
	aliases: ...

	# presenter adının sınıfa çevrilme kurallarını tanımlar
	mapping: ...

	# geçersiz bağlantı uyarıları bastırılsın mı?
	# yalnızca geliştirme modunda etkilidir
	silentLinks: ...        # (bool) varsayılan false

nette/application 3.2 sürümünden itibaren bir çift error presenter tanımlanabilir:

application:
	errorPresenter:
		4xx: Error4xx   # Nette\Application\BadRequestException için
		5xx: Error5xx   # diğer istisnalar için

Bunları ayırmak yararlıdır, çünkü iki durum temelden farklıdır. BadRequestException (4xx kodları), uygulamanın sorunsuz olduğu ve yalnızca ziyaretçinin var olmayan bir şey istediği anlamına gelir. Bu yüzden sitenizin layout'unda dostça bir mesaj gösteren tam donanımlı bir presenter kullanabilirsiniz. Buna karşılık 5xx hatası, uygulamada bir şeyin bozulduğu ve nedenini bilmediğiniz anlamına gelir. 5xx presenter'ını olabildiğince yalın tutun ki render edilirken başka bir şey bozulmasın; ideal olarak veritabanına, layout'a veya oturum açmış kullanıcıya dokunmamalıdır.

silentLinks seçeneği, bağlantı üretimi başarısız olduğunda (örneğin presenter var olmadığı için) Nette'in geliştirme modunda nasıl davranacağını belirler. Varsayılan false değeri, Nette'in E_USER_WARNING hatası tetiklemesi demektir. true yapmak bu hata mesajını bastırır. Üretim ortamında E_USER_WARNING her zaman tetiklenir. Bu davranış, presenter'ın $invalidLinkMode değişkeni ayarlanarak da etkilenebilir.

Takma adlar, sık kullanılan presenter'lara başvurmayı kolaylaştırır.

Mapping, sınıf adının presenter adından türetilme kurallarını tanımlar.

Presenter'ların otomatik kaydı

Nette, presenter'ları DI konteynerine servis olarak otomatik ekler, bu da oluşturulmalarını belirgin biçimde hızlandırır. Nette'in presenter'ları nasıl bulduğu yapılandırılabilir:

application:
	# presenter'lar Composer sınıf haritasında aransın mı?
	scanComposer: ...      # (bool) varsayılan true

	# sınıf ve dosya adının uyması gereken maske
	scanFilter: ...        # (string) varsayılan '*Presenter'

	# presenter'lar hangi dizinlerde aransın?
	scanDirs:              # (string[]|false) varsayılan '%appDir%'
		- %vendorDir%/mymodule

scanDirs içinde listelenen dizinler varsayılan %appDir% değerini değiştirmez, ona eklenir; yani scanDirs hem %appDir% hem %vendorDir%/mymodule yollarını içerir. Varsayılan dizini atlamak istersek ünlem işareti kullanırız:

application:
	scanDirs!:
		- %vendorDir%/mymodule

Dizin taraması, değeri false yaparak kapatılabilir. Presenter'lar o zaman servis olarak kaydedilmez, dolayısıyla decorator bölümünden ayarlanamazlar ve oluşturulmaları yavaşlar. Bu yüzden otomatik kaydı tamamen bastırmayı önermiyoruz, çünkü uygulamanın performansını düşürür.

Latte şablonları

Bu ayar, Latte'nin bileşenlerdeki ve presenter'lardaki davranışını genel olarak etkiler.

latte:
	# Tracy Bar'da Latte paneli ana şablon için (true) mi, tüm bileşenler için (all) mi gösterilsin?
	debugger: ...        # (true|false|'all') Tracy varsa etkin (yalnızca hata ayıklama modunda)

	# şablonları declare(strict_types=1) başlığıyla üret
	strictTypes: ...     # (bool) varsayılan false

	# [katı ayrıştırıcı modunu |latte:develop#strict mode] etkinleştir
	strictParsing: ...   # (bool) varsayılan false

	# değişkenlerin kapsamını döngü gövdesiyle sınırlar
	scopedLoopVariables: ... # (bool) varsayılan false

	# çift etiketlerdeki iç içelikten kaynaklanan girintiyi kaldırır
	dedent: ...          # (bool) varsayılan false

	# [üretilen kodun denetimini |latte:develop#Checking Generated Code] etkinleştir
	phpLinter: ...       # (string) varsayılan null

	# yerel ayarı belirle
	locale: cs_CZ        # (string) varsayılan null

	# $this->template nesnesinin sınıfı
	templateClass: App\MyTemplateClass # varsayılan Nette\Bridges\ApplicationLatte\DefaultTemplate

Yeni uzantıları şöyle ekleyebilirsiniz:

latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)

Yönlendirme

Temel ayarlar:

routing:
	# Tracy Bar'da yönlendirme paneli gösterilsin mi?
	debugger: ...   # (bool) Tracy varsa etkin (yalnızca hata ayıklama modunda)

	# router'ı DI konteynerine serileştir
	cache: ...      # (bool) varsayılan false

Yönlendirme genellikle RouterFactory sınıfında tanımlanır. Alternatif olarak rotalar yapılandırmada maske: eylem çiftleriyle de tanımlanabilir, ama bu yöntem pek esneklik sunmaz:

routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default

Sabitler

PHP sabitlerinin oluşturulması.

constants:
	Foobar: 'baz'

Foobar sabiti uygulama başladıktan sonra oluşturulur.

Sabitler genel olarak erişilebilir değişkenler olarak kullanılmamalıdır. Nesnelere değer aktarmak için bağımlılık enjeksiyonu kullanın.

PHP

PHP direktiflerinin ayarlanması. Tüm direktiflere genel bakışı php.net adresinde bulabilirsiniz.

php:
	date.timezone: Europe/Prague

DI servisleri

Bu servisler DI konteynerine eklenir:

Ad Tip Açıklama
application.application Nette\Application\Application uygulama çalıştırıcısı
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\IPresenterFactory presenter factory
application.### Nette\Application\UI\Presenter tek tek presenter'lar
routing.router Nette\Routing\Router router
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory Latte\Engine nesnesi için factory
latte.templateFactory Nette\Application\UI\TemplateFactory $this->template için factory
versiyon: 4.x