Glossario dei termini

AJAX

Asynchronous JavaScript and XML – tecnologia di scambio di informazioni tra client e server tramite protocollo HTTP senza la necessità di ricaricare l'intera pagina ad ogni richiesta. Sebbene dal nome possa sembrare che invii dati solo in formato XML, viene comunemente utilizzato anche il formato JSON.

Azione del presenter

Parte logica del presenter che esegue una singola azione. Ad esempio, visualizza la pagina di un prodotto, disconnette l'utente, ecc. Un presenter può avere più azioni.

BOM

Il cosiddetto byte order mark è un carattere speciale iniziale in un file, utilizzato come indicatore dell'ordine dei byte nella codifica. Alcuni editor lo inseriscono nei file. È praticamente invisibile, ma causa problemi con l'invio dell'output e degli header da PHP. Per la rimozione di massa è possibile utilizzare Code Checker.

Controller

Controllore che elabora le richieste dell'utente e, in base ad esse, chiama la logica applicativa appropriata (cioè il model) e quindi chiede alla view di renderizzare i dati. L'equivalente dei controller in Nette Framework sono i presenter.

Cross-Site Scripting (XSS)

Cross-Site Scripting è un metodo di violazione dei siti web che sfrutta output non trattati. L'attaccante può quindi inserire il proprio codice nella pagina e quindi modificarla o addirittura ottenere dati sensibili sui visitatori. Ci si può difendere da XSS solo trattando in modo coerente e corretto tutte le stringhe.

Nette Framework introduce una tecnologia rivoluzionaria Context-Aware Escaping, che vi libererà per sempre dal rischio di Cross-Site Scripting. Tratta automaticamente tutti gli output, quindi non può succedere che il codificatore dimentichi qualcosa.

Cross-Site Request Forgery (CSRF)

L'attacco Cross-Site Request Forgery consiste nel fatto che l'attaccante attira la vittima su una pagina che esegue discretamente nel browser della vittima una richiesta al server su cui la vittima è loggata, e il server crede che la richiesta sia stata eseguita dalla vittima di sua spontanea volontà. E così, sotto l'identità della vittima, esegue una determinata azione senza che questa ne sia a conoscenza. Può trattarsi di modifica o cancellazione di dati, invio di un messaggio, ecc.

Nette Framework protegge automaticamente i form e i segnali nei presenter da questo tipo di attacco. E lo fa impedendo il loro invio o attivazione da un altro dominio.

Dependency Injection

Dependency Injection (DI) è un pattern di progettazione che indica come separare la creazione degli oggetti dalle loro dipendenze. Cioè, la classe non è responsabile della creazione o inizializzazione delle sue dipendenze, ma invece queste dipendenze le vengono fornite da codice esterno (questo può essere anche un container DI). Il vantaggio sta nel fatto che consente una maggiore flessibilità del codice, una migliore comprensibilità e un più facile testing dell'applicazione, poiché le dipendenze sono facilmente sostituibili e isolate dalle altre parti del codice. Maggiori informazioni nel capitolo Cos'è l'Iniezione delle Dipendenze?

Container Dependency Injection

Un container Dependency Injection (anche container DI o container IoC) è uno strumento che si occupa della creazione e della gestione delle dipendenze in un'applicazione (ovvero i servizi). Il container ha solitamente una configurazione che definisce quali classi dipendono da altre classi, quali implementazioni specifiche delle dipendenze devono essere utilizzate e come queste dipendenze devono essere create. Quindi il container crea questi oggetti e li fornisce alle classi che ne hanno bisogno. Maggiori informazioni nel capitolo Cos'è un container DI?

Escaping

L'escaping è la conversione di caratteri che hanno un significato speciale in un dato contesto in altre sequenze corrispondenti. Esempio: vogliamo scrivere virgolette in una stringa delimitata da virgolette. Poiché le virgolette hanno un significato speciale nel contesto della stringa e la loro semplice scrittura verrebbe interpretata come la fine della stringa, è necessario scriverle con un'altra sequenza corrispondente. Quale esattamente è determinato dalle regole del contesto.

Filtro (precedentemente helper)

Nei template, il termine filtro si riferisce solitamente a una funzione che aiuta a modificare o riformattare i dati nella forma finale. I template dispongono di diversi filtri standard.

Invalidazione

Notifica a uno snippet di ridisegnarsi. In un altro significato, anche cancellazione del contenuto della cache.

JSON

Formato per lo scambio di dati basato sulla sintassi JavaScript (ne è un sottoinsieme). La specifica esatta si trova sulla pagina www.json.org.

Componente

Parte riutilizzabile dell'applicazione. Può essere una parte visiva della pagina, come descritto nel capitolo Scrivere componenti, oppure il termine componente si riferisce anche alla classe Component (tale componente non deve essere visivo).

Caratteri di controllo

I caratteri di controllo sono caratteri invisibili che possono comparire nel testo ed eventualmente causare problemi. Per la loro rimozione di massa dai file è possibile utilizzare Code Checker e per la rimozione da una variabile la funzione Strings::normalize().

Eventi

Un evento è una situazione attesa in un oggetto, che quando si verifica, vengono chiamati i cosiddetti handler, cioè callback che reagiscono all'evento (esempio). Un evento può essere ad esempio l'invio di un form, il login di un utente, ecc. Gli eventi sono quindi una forma di Inversion of Control.

Ad esempio, il login dell'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. Nel momento in cui l'utente effettua il login, il metodo login() chiama tutti i callback nell'array. Il nome della variabile nella forma onXyz è una convenzione utilizzata in tutto Nette.

Latte

Uno dei più avanzati sistemi di template.

Model

Il modello è la base dati e soprattutto funzionale dell'intera applicazione. Contiene tutta la logica applicativa (si usa anche il termine business logic). È la M di MVC o MVP. Qualsiasi azione dell'utente (login, aggiunta di merce al carrello, modifica di un valore nel database) rappresenta un'azione del modello.

Il modello gestisce il proprio stato interno e offre all'esterno un'interfaccia fissa. Chiamando le funzioni di questa interfaccia possiamo interrogare o modificare il suo stato. Il modello non sa dell'esistenza della view o del controller.

Model-View-Controller

Architettura software nata dalla necessità di separare nelle applicazioni con interfaccia grafica il codice di gestione (controller) dal codice della logica applicativa (model) e dal codice che visualizza i dati (view). Questo rende l'applicazione più chiara, facilita lo sviluppo futuro e consente il testing delle singole parti separatamente.

Model-View-Presenter

Architettura basata su Model-View-Controller.

Modulo

Un modulo rappresenta una parte logica dell'applicazione. In una disposizione tipica, si tratta di un gruppo di presenter e template che gestiscono una determinata area di funzionalità. I moduli vengono collocati in directory separate, come ad esempio Front/, Admin/ o Shop/.

Ad esempio, un e-shop può essere suddiviso in:

  • Frontend (Shop/) per la visualizzazione dei prodotti e l'acquisto
  • Sezione clienti (Customer/) per la gestione degli ordini
  • Amministrazione (Admin/) per il gestore

Tecnicamente si tratta di directory comuni, ma grazie a una suddivisione chiara aiutano a scalare l'applicazione. Il presenter Admin:Product:List sarà quindi fisicamente collocato, ad esempio, nella directory app/Presentation/Admin/Product/List/ (vedi mapping dei presenter).

Namespace

Spazio dei nomi, parte del linguaggio PHP dalla versione 5.3 e di alcuni altri linguaggi di programmazione, che consente l'uso di classi che hanno lo stesso nome in librerie diverse senza che si verifichi una collisione di nomi. Vedi documentazione PHP.

Presenter

Un presenter è 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 su disco, JSON, un redirect o qualsiasi cosa si inventi.

Di solito, il termine presenter si riferisce a un discendente della classe Nette\Application\UI\Presenter. In base alle richieste in arrivo, esegue le azioni corrispondenti e renderizza i template.

Router

Traduttore bidirezionale tra richiesta HTTP / URL e azione del presenter. Bidirezionale significa che dalla richiesta HTTP è possibile derivare l'azione del presenter, ma anche viceversa generare l'URL corrispondente per l'azione. Maggiori informazioni nel capitolo sul routing URL.

I cookie SameSite forniscono un meccanismo per riconoscere cosa ha portato al caricamento della pagina. Può avere tre valori: Lax, Strict e None (quest'ultimo richiede HTTPS). Se la richiesta per la pagina proviene direttamente dal sito o l'utente apre la pagina inserendola direttamente nella barra degli indirizzi o cliccando su un segnalibro, il browser invia al server tutti i cookie (cioè con flag Lax, Strict e None). Se l'utente arriva al sito cliccando su un link da un altro sito, vengono trasmessi al server i cookie con flag Lax e None. Se la richiesta viene generata in altro modo, come l'invio di un form POST da un altro sito, il caricamento all'interno di un iframe, tramite JavaScript, ecc., vengono inviati solo i cookie con flag None.

Servizio

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

Snippet

Frammento, parte della pagina che può essere ridisegnata separatamente durante una richiesta AJAX.

View

La view, cioè la vista, è il livello dell'applicazione responsabile della visualizzazione del risultato della richiesta. Di solito utilizza un sistema di template e sa come visualizzare un particolare componente o il risultato ottenuto dal modello.

versione: 4.0