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 |