Nette Documentation Preview

syntax
Glossario dei termini
*********************


AJAX .[#toc-ajax]
-----------------
Asynchronous JavaScript and XML - tecnologia per la comunicazione client-server attraverso il protocollo HTTP senza la necessità di ricaricare l'intera pagina durante ogni richiesta. Nonostante l'acronimo, il formato [JSON |#JSON] è spesso utilizzato al posto di XML.


Azione del presentatore .[#toc-presenter-action]
------------------------------------------------
Parte logica del [presentatore |#presenter], che esegue un'azione, ad esempio per mostrare una pagina di prodotto, per registrare un utente, ecc. Un presentatore può avere più azioni.


BOM
---
La cosiddetta *byte order mask* è il primo carattere speciale di un file e indica l'ordine dei byte nella codifica. Alcuni editor la includono automaticamente, è praticamente invisibile, ma causa problemi con le intestazioni e l'invio di output da PHP. È possibile utilizzare [Code Checker |code-checker:] per rimuoverla in blocco.


Controllore .[#toc-controller]
------------------------------
Il controllore elabora le richieste dell'utente e, sulla base di queste, richiama una particolare logica applicativa (cioè il [modello |#model]), quindi richiama la [vista |#view] per il rendering dei dati. Un analogo dei controllori sono i [presenter |#presenter] di Nette Framework.


Cross-Site Scripting (XSS) .[#toc-cross-site-scripting-xss]
-----------------------------------------------------------
Il Cross-Site Scripting è un metodo di interruzione di un sito che utilizza input non inescapsulati. Un aggressore può iniettare il proprio codice HTML o JavaScript e modificare l'aspetto della pagina o addirittura raccogliere informazioni sensibili sugli utenti. La protezione contro gli XSS è semplice: l'escape coerente e corretto di tutte le stringhe e gli input.

Nette Framework è dotato di una nuovissima tecnologia, il [Context-Aware Escaping |latte:safety-first#context-aware-escaping], che vi permetterà di eliminare per sempre i rischi di Cross-Site Scripting. L'escape di tutti gli input avviene automaticamente in base a un determinato contesto, per cui è impossibile che un coder dimentichi accidentalmente qualcosa.


Falsificazione delle richieste cross-site (CSRF) .[#toc-cross-site-request-forgery-csrf]
----------------------------------------------------------------------------------------
Un attacco Cross-Site Request Forgery prevede che l'aggressore induca la vittima a visitare una pagina che esegue silenziosamente una richiesta nel browser della vittima al server in cui la vittima è attualmente loggata, e il server crede che la richiesta sia stata fatta dalla vittima a suo piacimento. Il server esegue una determinata azione sotto l'identità della vittima, ma senza che questa se ne accorga. Può trattarsi della modifica o della cancellazione di dati, dell'invio di un messaggio, ecc.

Nette Framework **protegge automaticamente i moduli e i segnali nei presenter** da questo tipo di attacco. Ciò avviene impedendo che vengano inviati o richiamati da un altro dominio.


Iniezione di dipendenza .[#toc-dependency-injection]
----------------------------------------------------
La Dependency Injection (DI) è un modello di progettazione che indica come separare la creazione degli oggetti dalle loro dipendenze. In altre parole, una classe non è responsabile della creazione o dell'inizializzazione delle sue dipendenze, ma queste ultime sono fornite da codice esterno (che può includere un [contenitore DI |#Dependency Injection container]). Il vantaggio è che consente una maggiore flessibilità del codice, una migliore leggibilità e una maggiore facilità di test delle applicazioni, perché le dipendenze sono facilmente sostituibili e isolate da altre parti del codice. Per ulteriori informazioni, vedere [Cos'è la Dependency Injection? |dependency-injection:introduction]


Contenitore per l'iniezione di dipendenze .[#toc-dependency-injection-container]
--------------------------------------------------------------------------------
Un contenitore di Dependency Injection (anche contenitore DI o contenitore IoC) è uno strumento che gestisce la creazione e la gestione delle dipendenze in un'applicazione (o [servizi |#service]). Un contenitore di solito ha una configurazione che definisce quali classi dipendono da altre classi, quali implementazioni specifiche di dipendenze utilizzare e come creare tali dipendenze. Il contenitore crea quindi questi oggetti e li fornisce alle classi che ne hanno bisogno. Per ulteriori informazioni, vedere [Cos'è un contenitore DI? |dependency-injection:container]


Sfuggire .[#toc-escaping]
-------------------------
L'escape è la conversione di caratteri con un significato speciale in un determinato contesto in altre sequenze equivalenti. Esempio: Vogliamo scrivere le virgolette in una stringa con le virgolette. Poiché le virgolette hanno un significato speciale nel contesto della stringa con le virgolette, è necessario utilizzare un'altra sequenza equivalente. La sequenza concreta è determinata dalle regole del contesto (ad esempio, `\"` nella stringa chiusa da virgolette di PHP, `"` negli attributi HTML, ecc.)


Filtro (in precedenza Helper) .[#toc-filter-formerly-helper]
------------------------------------------------------------
Funzione di filtro. Nei modelli, il [filtro |latte:syntax#filters] è una funzione che aiuta a modificare o formattare i dati nella forma di output. I modelli hanno diversi [filtri standard |latte:filters] predefiniti.


Invalidazione .[#toc-invalidation]
----------------------------------
Avviso di uno [snippet |#snippet] da renderizzare. In altri contesti, anche la cancellazione di una cache.


JSON .[#toc-json]
-----------------
Formato di scambio dati basato sulla sintassi di JavaScript (è il suo sottoinsieme). Le specifiche esatte si trovano su www.json.org.


Componente .[#toc-component]
----------------------------
Parte riutilizzabile di un'applicazione. Può essere una parte visuale di una pagina, come descritto nel capitolo [componenti |application:components], oppure il termine può anche indicare la classe [Componente ( |component-model:] tale componente non deve essere necessariamente visuale).


Caratteri di controllo .[#toc-control-characters]
-------------------------------------------------
I caratteri di controllo sono caratteri invisibili che possono comparire in un testo e causare problemi. Per la loro rimozione dai file si può usare [Code Checker |code-checker:], per la loro rimozione da una variabile si può usare la funzione [Strings::normalize() |utils:strings#normalize].


Eventi .[#toc-events]
---------------------
Un evento è una situazione attesa nell'oggetto e, quando si verifica, vengono richiamati i cosiddetti gestori, cioè i callback che reagiscono all'evento ("sample":https://gist.github.com/dg/332cdd51bdf7d66a6d8003b134508a38). L'evento può essere, ad esempio, l'invio di un modulo, il login di un utente, ecc. Gli eventi sono quindi una forma di *inversione del controllo*.

Ad esempio, il login di un utente avviene nel metodo `Nette\Security\User::login()`. L'oggetto `User` ha una variabile pubblica `$onLoggedIn`, che è un array a cui chiunque può aggiungere un callback. Non appena l'utente effettua il login, il metodo `login()` richiama tutti i callback presenti nell'array. Il nome di una variabile nella forma `onXyz` è una convenzione utilizzata in tutto Nette.


Latte .[#toc-latte]
-------------------
Uno dei [sistemi di template |latte:] più innovativi di sempre.


Modello .[#toc-model]
---------------------
Il modello rappresenta la base dei dati e delle funzioni dell'intera applicazione. Include l'intera logica dell'applicazione (talvolta indicata anche come "logica aziendale"). È la **M** di **M**VC o MPV. Qualsiasi azione dell'utente (login, inserimento di oggetti nel carrello, modifica di un valore del database) rappresenta un'azione del modello.

Il modello gestisce il suo stato interno e fornisce un'interfaccia pubblica. Richiamando questa interfaccia, possiamo prendere o cambiare il suo stato. Il modello non conosce l'esistenza di una [vista |#view] o di un [controllore |#controller], è totalmente indipendente da essi.


Modello-Vista-Controllore .[#toc-model-view-controller]
-------------------------------------------------------
Architettura software emersa nello sviluppo di applicazioni GUI per separare il codice per il controllo del flusso ([controller |#controller]) dal codice della logica dell'applicazione ([model |#model]) e dal codice per il rendering dei dati ([view |#view]). In questo modo il codice è più comprensibile, facilita lo sviluppo futuro e consente di testare separatamente le parti separate.


Modello-Vista-Presentatore .[#toc-model-view-presenter]
-------------------------------------------------------
Architettura basata su [Model-View-Controller |#Model-View-Controller].


Modulo .[#toc-module]
---------------------
[Il modulo |application:modules] in Nette Framework rappresenta un insieme di presentatori e modelli, eventualmente anche componenti e modelli, che servono dati a un presentatore. È quindi una parte logica di un'applicazione.

Ad esempio, un e-shop può avere tre moduli:
1) Catalogo prodotti con carrello.
2) Amministrazione per il cliente.
3) Amministrazione per il negoziante.


Spazio dei nomi .[#toc-namespace]
---------------------------------
Lo spazio dei nomi è una caratteristica del linguaggio PHP dalla versione 5.3 e di altri linguaggi di programmazione. Aiuta a evitare collisioni di nomi (ad esempio, due classi con lo stesso nome) quando si utilizzano insieme librerie diverse. Per ulteriori dettagli, consultare la [documentazione di PHP |https://www.php.net/manual/en/language.namespaces.rationale.php].


Presentatore .[#toc-presenter]
------------------------------
Il presentatore è un oggetto che prende la [richiesta |api:Nette\Application\Request] tradotta dal router dalla richiesta HTTP e genera una [risposta |api:Nette\Application\Response]. La risposta può essere una pagina HTML, un'immagine, un documento XML, un file, un JSON, un reindirizzamento o qualsiasi altra cosa si pensi.

Per presentatore si intende solitamente un discendente della classe [api:Nette\Application\UI\Presenter]. Con le richieste esegue le [azioni |application:presenters#life-cycle-of-presenter] appropriate e rende i modelli.


Router .[#toc-router]
---------------------
Traduttore bidirezionale tra richiesta HTTP / URL e azione del presentatore. Bi-direzionale significa che non solo è possibile derivare un'[azione del presentatore |#presenter action] dalla richiesta HTTP, ma anche generare l'URL appropriato per un'azione. Per saperne di più, consultare il capitolo sull'[instradamento degli URL |application:routing].


Cookie SameSite .[#toc-samesite-cookie]
---------------------------------------
I cookie SameSite forniscono un meccanismo per riconoscere la causa del caricamento della pagina. Può avere tre valori: `Lax`, `Strict` e `None` (quest'ultimo richiede HTTPS). Se la richiesta della pagina proviene direttamente dal sito o l'utente apre la pagina digitando direttamente nella barra degli indirizzi o cliccando su un segnalibro, il browser invia tutti i cookie al server (cioè con i flag `Lax`, `Strict` e `None`). Se l'utente clicca sul sito tramite un link proveniente da un altro sito, i cookie con i flag `Lax` e `None` vengono passati al server. Se la richiesta viene effettuata con altri mezzi, come l'invio di un modulo POST da un altro sito, il caricamento all'interno di un iframe, l'utilizzo di JavaScript, ecc. vengono inviati solo i cookie con il flag `None`.


Servizio .[#toc-service]
------------------------
Nel contesto della Dependency Injection, un servizio si riferisce a un oggetto creato e gestito da un contenitore DI. Un servizio può essere facilmente sostituito da un'altra implementazione, ad esempio a scopo di test o per modificare il comportamento di un'applicazione, senza dover modificare il codice che utilizza il servizio.


Frammento .[#toc-snippet]
-------------------------
Snippet di una pagina, che può essere restituito separatamente durante una richiesta [AJAX |#AJAX].


Vista .[#toc-view]
------------------
La vista è un livello dell'applicazione che è responsabile della resa dei risultati della richiesta. Di solito utilizza un sistema di template e sa come rendere i suoi componenti o i risultati presi dal modello.



{{leftbar: www:@menu-common}}
{{priority: -2}}

Glossario dei termini

AJAX

Asynchronous JavaScript and XML – tecnologia per la comunicazione client-server attraverso il protocollo HTTP senza la necessità di ricaricare l'intera pagina durante ogni richiesta. Nonostante l'acronimo, il formato JSON è spesso utilizzato al posto di XML.

Azione del presentatore

Parte logica del presentatore, che esegue un'azione, ad esempio per mostrare una pagina di prodotto, per registrare un utente, ecc. Un presentatore può avere più azioni.

BOM

La cosiddetta byte order mask è il primo carattere speciale di un file e indica l'ordine dei byte nella codifica. Alcuni editor la includono automaticamente, è praticamente invisibile, ma causa problemi con le intestazioni e l'invio di output da PHP. È possibile utilizzare Code Checker per rimuoverla in blocco.

Controllore

Il controllore elabora le richieste dell'utente e, sulla base di queste, richiama una particolare logica applicativa (cioè il modello), quindi richiama la vista per il rendering dei dati. Un analogo dei controllori sono i presenter di Nette Framework.

Cross-Site Scripting (XSS)

Il Cross-Site Scripting è un metodo di interruzione di un sito che utilizza input non inescapsulati. Un aggressore può iniettare il proprio codice HTML o JavaScript e modificare l'aspetto della pagina o addirittura raccogliere informazioni sensibili sugli utenti. La protezione contro gli XSS è semplice: l'escape coerente e corretto di tutte le stringhe e gli input.

Nette Framework è dotato di una nuovissima tecnologia, il Context-Aware Escaping, che vi permetterà di eliminare per sempre i rischi di Cross-Site Scripting. L'escape di tutti gli input avviene automaticamente in base a un determinato contesto, per cui è impossibile che un coder dimentichi accidentalmente qualcosa.

Falsificazione delle richieste cross-site (CSRF)

Un attacco Cross-Site Request Forgery prevede che l'aggressore induca la vittima a visitare una pagina che esegue silenziosamente una richiesta nel browser della vittima al server in cui la vittima è attualmente loggata, e il server crede che la richiesta sia stata fatta dalla vittima a suo piacimento. Il server esegue una determinata azione sotto l'identità della vittima, ma senza che questa se ne accorga. Può trattarsi della modifica o della cancellazione di dati, dell'invio di un messaggio, ecc.

Nette Framework protegge automaticamente i moduli e i segnali nei presenter da questo tipo di attacco. Ciò avviene impedendo che vengano inviati o richiamati da un altro dominio.

Iniezione di dipendenza

La Dependency Injection (DI) è un modello di progettazione che indica come separare la creazione degli oggetti dalle loro dipendenze. In altre parole, una classe non è responsabile della creazione o dell'inizializzazione delle sue dipendenze, ma queste ultime sono fornite da codice esterno (che può includere un contenitore DI). Il vantaggio è che consente una maggiore flessibilità del codice, una migliore leggibilità e una maggiore facilità di test delle applicazioni, perché le dipendenze sono facilmente sostituibili e isolate da altre parti del codice. Per ulteriori informazioni, vedere Cos'è la Dependency Injection?

Contenitore per l'iniezione di dipendenze

Un contenitore di Dependency Injection (anche contenitore DI o contenitore IoC) è uno strumento che gestisce la creazione e la gestione delle dipendenze in un'applicazione (o servizi). Un contenitore di solito ha una configurazione che definisce quali classi dipendono da altre classi, quali implementazioni specifiche di dipendenze utilizzare e come creare tali dipendenze. Il contenitore crea quindi questi oggetti e li fornisce alle classi che ne hanno bisogno. Per ulteriori informazioni, vedere Cos'è un contenitore DI?

Sfuggire

L'escape è la conversione di caratteri con un significato speciale in un determinato contesto in altre sequenze equivalenti. Esempio: Vogliamo scrivere le virgolette in una stringa con le virgolette. Poiché le virgolette hanno un significato speciale nel contesto della stringa con le virgolette, è necessario utilizzare un'altra sequenza equivalente. La sequenza concreta è determinata dalle regole del contesto (ad esempio, \" nella stringa chiusa da virgolette di PHP, " negli attributi HTML, ecc.)

Filtro (in precedenza Helper)

Funzione di filtro. Nei modelli, il filtro è una funzione che aiuta a modificare o formattare i dati nella forma di output. I modelli hanno diversi filtri standard predefiniti.

Invalidazione

Avviso di uno snippet da renderizzare. In altri contesti, anche la cancellazione di una cache.

JSON

Formato di scambio dati basato sulla sintassi di JavaScript (è il suo sottoinsieme). Le specifiche esatte si trovano su www.json.org.

Componente

Parte riutilizzabile di un'applicazione. Può essere una parte visuale di una pagina, come descritto nel capitolo componenti, oppure il termine può anche indicare la classe Componente ( tale componente non deve essere necessariamente visuale).

Caratteri di controllo

I caratteri di controllo sono caratteri invisibili che possono comparire in un testo e causare problemi. Per la loro rimozione dai file si può usare Code Checker, per la loro rimozione da una variabile si può usare la funzione Strings::normalize().

Eventi

Un evento è una situazione attesa nell'oggetto e, quando si verifica, vengono richiamati i cosiddetti gestori, cioè i callback che reagiscono all'evento (sample). L'evento può essere, ad esempio, l'invio di un modulo, il login di un utente, ecc. Gli eventi sono quindi una forma di inversione del controllo.

Ad esempio, il login di un utente avviene nel metodo Nette\Security\User::login(). L'oggetto User ha una variabile pubblica $onLoggedIn, che è un array a cui chiunque può aggiungere un callback. Non appena l'utente effettua il login, il metodo login() richiama tutti i callback presenti nell'array. Il nome di una variabile nella forma onXyz è una convenzione utilizzata in tutto Nette.

Latte

Uno dei sistemi di template più innovativi di sempre.

Modello

Il modello rappresenta la base dei dati e delle funzioni dell'intera applicazione. Include l'intera logica dell'applicazione (talvolta indicata anche come „logica aziendale“). È la M di MVC o MPV. Qualsiasi azione dell'utente (login, inserimento di oggetti nel carrello, modifica di un valore del database) rappresenta un'azione del modello.

Il modello gestisce il suo stato interno e fornisce un'interfaccia pubblica. Richiamando questa interfaccia, possiamo prendere o cambiare il suo stato. Il modello non conosce l'esistenza di una vista o di un controllore, è totalmente indipendente da essi.

Modello-Vista-Controllore

Architettura software emersa nello sviluppo di applicazioni GUI per separare il codice per il controllo del flusso (controller) dal codice della logica dell'applicazione (model) e dal codice per il rendering dei dati (view). In questo modo il codice è più comprensibile, facilita lo sviluppo futuro e consente di testare separatamente le parti separate.

Modello-Vista-Presentatore

Architettura basata su Model-View-Controller.

Modulo

Il modulo in Nette Framework rappresenta un insieme di presentatori e modelli, eventualmente anche componenti e modelli, che servono dati a un presentatore. È quindi una parte logica di un'applicazione.

Ad esempio, un e-shop può avere tre moduli:

  1. Catalogo prodotti con carrello.
  2. Amministrazione per il cliente.
  3. Amministrazione per il negoziante.

Spazio dei nomi

Lo spazio dei nomi è una caratteristica del linguaggio PHP dalla versione 5.3 e di altri linguaggi di programmazione. Aiuta a evitare collisioni di nomi (ad esempio, due classi con lo stesso nome) quando si utilizzano insieme librerie diverse. Per ulteriori dettagli, consultare la documentazione di PHP.

Presentatore

Il presentatore è un oggetto che prende la richiesta tradotta dal router dalla richiesta HTTP e genera una risposta. La risposta può essere una pagina HTML, un'immagine, un documento XML, un file, un JSON, un reindirizzamento o qualsiasi altra cosa si pensi.

Per presentatore si intende solitamente un discendente della classe Nette\Application\UI\Presenter. Con le richieste esegue le azioni appropriate e rende i modelli.

Router

Traduttore bidirezionale tra richiesta HTTP / URL e azione del presentatore. Bi-direzionale significa che non solo è possibile derivare un'azione del presentatore dalla richiesta HTTP, ma anche generare l'URL appropriato per un'azione. Per saperne di più, consultare il capitolo sull'instradamento degli URL.

I cookie SameSite forniscono un meccanismo per riconoscere la causa del caricamento della pagina. Può avere tre valori: Lax, Strict e None (quest'ultimo richiede HTTPS). Se la richiesta della pagina proviene direttamente dal sito o l'utente apre la pagina digitando direttamente nella barra degli indirizzi o cliccando su un segnalibro, il browser invia tutti i cookie al server (cioè con i flag Lax, Strict e None). Se l'utente clicca sul sito tramite un link proveniente da un altro sito, i cookie con i flag Lax e None vengono passati al server. Se la richiesta viene effettuata con altri mezzi, come l'invio di un modulo POST da un altro sito, il caricamento all'interno di un iframe, l'utilizzo di JavaScript, ecc. vengono inviati solo i cookie con il flag None.

Servizio

Nel contesto della Dependency Injection, un servizio si riferisce a un oggetto creato e gestito da un contenitore DI. Un servizio può essere facilmente sostituito da un'altra implementazione, ad esempio a scopo di test o per modificare il comportamento di un'applicazione, senza dover modificare il codice che utilizza il servizio.

Frammento

Snippet di una pagina, che può essere restituito separatamente durante una richiesta AJAX.

Vista

La vista è un livello dell'applicazione che è responsabile della resa dei risultati della richiesta. Di solito utilizza un sistema di template e sa come rendere i suoi componenti o i risultati presi dal modello.