Configurazione dell'applicazione

Panoramica delle opzioni di configurazione di Nette Application.

Application

application:
	# mostrare il pannello "Nette Application" nella BlueScreen di Tracy?
	debugger: ...           # (bool) attivo se Tracy è disponibile

	# in produzione le eccezioni sono sempre gestite dall'error-presenter;
	# questa opzione attiva quel comportamento anche in modalità di sviluppo
	catchExceptions: ...    # (bool) di norma false, cioè disattivo in dev, sempre attivo in produzione

	# nome dell'error-presenter
	errorPresenter: Error   # (string|array) di norma 'Nette:Error'

	# definisce gli alias per i presenter e le azioni
	aliases: ...

	# definisce le regole per tradurre il nome del presenter in una classe
	mapping: ...

	# silenziare gli avvisi sui link non validi?
	# ha effetto solo in modalità di sviluppo
	silentLinks: ...        # (bool) di norma false

Da nette/application versione 3.2 è possibile definire una coppia di error presenter:

application:
	errorPresenter:
		4xx: Error4xx   # per Nette\Application\BadRequestException
		5xx: Error5xx   # per le altre eccezioni

Separarli è utile, perché le due situazioni sono radicalmente diverse. Una BadRequestException (codici 4xx) significa che l'applicazione sta bene e che semplicemente il visitatore ha chiesto qualcosa che non esiste. Potete quindi usare un presenter a pieno regime, che mostri un messaggio cordiale nel layout del vostro sito. Un errore 5xx significa invece che qualcosa nell'applicazione si è rotto e non sapete cosa. Tenete il presenter 5xx il più minimale possibile, così che durante il suo rendering non possa rompersi nient'altro: idealmente non dovrebbe toccare il database, il layout o l'utente connesso.

L'opzione silentLinks stabilisce come si comporta Nette in modalità di sviluppo quando la generazione di un link fallisce (per esempio perché il presenter non esiste ecc.). Il valore predefinito false significa che Nette emette un errore E_USER_WARNING. Impostandola a true questo messaggio di errore viene silenziato. In un ambiente di produzione E_USER_WARNING viene sempre emesso. Su questo comportamento si può influire anche impostando la variabile del presenter $invalidLinkMode.

Gli alias semplificano il riferimento ai presenter usati più di frequente.

Il mapping definisce le regole con cui il nome della classe viene ricavato dal nome del presenter.

Registrazione automatica dei presenter

Nette aggiunge automaticamente i presenter come servizi al container DI, il che ne accelera notevolmente la creazione. Il modo in cui Nette individua i presenter si può configurare:

application:
	# cercare i presenter nella class map di Composer?
	scanComposer: ...      # (bool) di norma true

	# maschera a cui devono corrispondere il nome della classe e quello del file
	scanFilter: ...        # (string) di norma '*Presenter'

	# in quali directory cercare i presenter?
	scanDirs:              # (string[]|false) di norma '%appDir%'
		- %vendorDir%/mymodule

Le directory elencate in scanDirs non sostituiscono il valore predefinito %appDir%, ma lo integrano, quindi scanDirs conterrà entrambi i percorsi, %appDir% e %vendorDir%/mymodule. Se vogliamo escludere la directory predefinita, usiamo un punto esclamativo:

application:
	scanDirs!:
		- %vendorDir%/mymodule

La scansione delle directory si può disattivare impostando il valore a false. I presenter non vengono allora più registrati come servizi, quindi non si possono modificare tramite la sezione decorator e la loro creazione è più lenta. Non consigliamo quindi di sopprimere del tutto la registrazione automatica, perché riduce le prestazioni dell'applicazione.

Template Latte

Questa impostazione influisce globalmente sul comportamento di Latte nei componenti e nei presenter.

latte:
	# mostrare il pannello di Latte nella Tracy Bar per il template principale (true) o per tutti i componenti (all)?
	debugger: ...        # (true|false|'all') attivo se Tracy è disponibile (solo in modalità debug)

	# genera i template con l'intestazione declare(strict_types=1)
	strictTypes: ...     # (bool) di norma false

	# attiva la [modalità di analisi rigorosa |latte:develop#strict mode]
	strictParsing: ...   # (bool) di norma false

	# limita l'ambito delle variabili al corpo del ciclo
	scopedLoopVariables: ... # (bool) di norma false

	# rimuove l'indentazione dovuta all'annidamento nei tag di tipo pari
	dedent: ...          # (bool) di norma false

	# attiva il [controllo del codice generato |latte:develop#Checking Generated Code]
	phpLinter: ...       # (string) di norma null

	# imposta il locale
	locale: cs_CZ        # (string) di norma null

	# classe dell'oggetto $this->template
	templateClass: App\MyTemplateClass # di norma Nette\Bridges\ApplicationLatte\DefaultTemplate

Potete aggiungere nuove estensioni così:

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

Routing

Impostazioni di base:

routing:
	# mostrare il pannello del routing nella Tracy Bar?
	debugger: ...   # (bool) attivo se Tracy è disponibile (solo in modalità debug)

	# serializza il router nel container DI
	cache: ...      # (bool) di norma false

Il routing si definisce di solito nella classe RouterFactory. In alternativa le route si possono definire anche nella configurazione, con coppie maschera: azione, ma questo metodo non offre molta flessibilità:

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

Costanti

Creazione di costanti PHP.

constants:
	Foobar: 'baz'

La costante Foobar verrà creata dopo l'avvio dell'applicazione.

Le costanti non devono servire da variabili globalmente accessibili. Per passare valori agli oggetti usate la dependency injection.

PHP

Impostazione delle direttive di PHP. Una panoramica di tutte le direttive si trova su php.net.

php:
	date.timezone: Europe/Prague

Servizi DI

Questi servizi vengono aggiunti al container DI:

Nome Tipo Descrizione
application.application Nette\Application\Application l'esecutore dell'applicazione
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\IPresenterFactory factory dei presenter
application.### Nette\Application\UI\Presenter i singoli presenter
routing.router Nette\Routing\Router router
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory factory dell'oggetto Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory factory di $this->template
versione: 4.x