Una introduzione a Laravel, un framework open source di tipo MVC scritto in PHP per lo sviluppo di applicazioni web. La versione di riferimento per questa presentazione è la 5.x
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
Modulo 4 – AJAX
- Interazioni client/server
- Framework a confronto:
- jQuery
- Mootools
- YUI
- JAST
Modulo 5 – ARIA e l’accessibilità lato client
- Prendere un po' di ARIA
- Le tecnologie assistive
- Ruoli, stati e proprietà
- Strumenti per lo sviluppo accessibile
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
Modulo 4 – AJAX
- Interazioni client/server
- Framework a confronto:
- jQuery
- Mootools
- YUI
- JAST
Modulo 5 – ARIA e l’accessibilità lato client
- Prendere un po' di ARIA
- Le tecnologie assistive
- Ruoli, stati e proprietà
- Strumenti per lo sviluppo accessibile
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Sistema complesso che include una interfaccia di controllo web-based che permette la gestione di una serie di processi in funzione in più container j2ee.
NET Framework versione 4 include miglioramenti per ASP.NET 4 in aree mirate. Anche Visual Studio 2010 include miglioramenti e nuove funzionalità per ottimizzare lo sviluppo di risorse Web. In questa sessione verrà fornita una panoramica di numerose delle nuove funzionalità incluse nella nuova versione. Vedremo anche le novità per gli sviluppatori introdotte da Internet Explorer 9
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
Selenium e testing web - di Alessio BenedettiGiuneco S.r.l
Selenium framework: Selenium è un framework open-source per l'automazione e il testing di applicazioni web che permette di controllare in remoto le istanze del browser ed emulare l'interazione di un utente.
Slide per l'ausilio alla presentazione od ad un corso veloce per lo sviluppo di Angular 2.
Comprende la struttura principale delle applicazioni di Angular, i componenti, le direttive, i servizi e pipes.
Breve panoramica sul typescript e sulle principali librerie.
ASP.NET MVC è una piattaforma aperta costruita come un puzzle di componenti. Per personalizzare il comportamento dei componenti interni del sistema è quindi sufficiente rimuovere uno dei tasselli e sostituirlo con uno scritto da noi. Un'operazione resa semplice ed immediata dall'interfaccia Dependency Resolver.
Node.js REST interface for MongoDB, we modified mongodb-rest (https://github.com/tdegrunt/mongodb-rest) to manage more operation:
counting elements
"distinct" operations
excel/csv export
list of available db collection
list of keys of a specific query
Multithreading support
It's now also possible to search by date range and are managed sort operations.
Verrà illustrato un caso pratico di modifica di un sito web, su tecnologia ASP.NET 1.1, completo ma non accessibile: obiettivo del tutorial è quello di ottenere in tempi brevi una versione accessibile dello stesso sito.
Sistema complesso che include una interfaccia di controllo web-based che permette la gestione di una serie di processi in funzione in più container j2ee.
NET Framework versione 4 include miglioramenti per ASP.NET 4 in aree mirate. Anche Visual Studio 2010 include miglioramenti e nuove funzionalità per ottimizzare lo sviluppo di risorse Web. In questa sessione verrà fornita una panoramica di numerose delle nuove funzionalità incluse nella nuova versione. Vedremo anche le novità per gli sviluppatori introdotte da Internet Explorer 9
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
Selenium e testing web - di Alessio BenedettiGiuneco S.r.l
Selenium framework: Selenium è un framework open-source per l'automazione e il testing di applicazioni web che permette di controllare in remoto le istanze del browser ed emulare l'interazione di un utente.
Slide per l'ausilio alla presentazione od ad un corso veloce per lo sviluppo di Angular 2.
Comprende la struttura principale delle applicazioni di Angular, i componenti, le direttive, i servizi e pipes.
Breve panoramica sul typescript e sulle principali librerie.
ASP.NET MVC è una piattaforma aperta costruita come un puzzle di componenti. Per personalizzare il comportamento dei componenti interni del sistema è quindi sufficiente rimuovere uno dei tasselli e sostituirlo con uno scritto da noi. Un'operazione resa semplice ed immediata dall'interfaccia Dependency Resolver.
Node.js REST interface for MongoDB, we modified mongodb-rest (https://github.com/tdegrunt/mongodb-rest) to manage more operation:
counting elements
"distinct" operations
excel/csv export
list of available db collection
list of keys of a specific query
Multithreading support
It's now also possible to search by date range and are managed sort operations.
Verrà illustrato un caso pratico di modifica di un sito web, su tecnologia ASP.NET 1.1, completo ma non accessibile: obiettivo del tutorial è quello di ottenere in tempi brevi una versione accessibile dello stesso sito.
1. Laravel from scratch
“Laravel è un framework open source
di tipo MVC scritto in PHP
per lo sviluppo di applicazioni web,
creato come derivazione di Symfony.”
- Dalla pagina wikipedia di Laravel
2. 2
Overview
● Requisiti di Laravel
● DotEnv, Artisan CLI & Blade
● Directory di un progetto
Laravel
● Service container
● Service provider
● Facade & Contract
● Routing
● Middleware
Laravel Mario Traetta
● CSRF Protection
● Controller
● Request & Response
● View
● Session
● Database
● Eloquent ORM
● Laradock
4. 4
DotEnv
● “.env”
● Configurazioni comuni per progetto
● Riadattabilità
● Macchine di sviluppo
● Macchine di produzione
● Sviluppo con container
● Sviluppo con macchine virtuali
Laravel Mario Traetta
5. 5
Artisan CLI
● Basata sulla Symfony Console
● Interfaccia a linea di comando
● Comandi eseguibili dal codice sorgente
● Mette a disposizione comandi per
• Visualizzare aiuti per lo sviluppatore
• Generare componenti di progetto
• Amministrare e gestire il progetto
Laravel Mario Traetta
6. 6
Blade
● Template engine ufficiale
● “.blade.php”
● Localizzazione
● Layout
● Riuso
● Estensione
Laravel Mario Traetta
7. 7
Blade: strutture di controllo
● Direttive
● If
● Switch
● Loop
● Commenti
● Embedded PHP
● Token CSRF
Laravel Mario Traetta
8. 8
Directory di un progetto Laravel (1/2)
● App: Classi principali
● Bootstrap: File d’avvio e directory di cache
● Config: Configurazioni per servizi
● Database:
● Migrazioni database
● Factory dei modelli di tabella
● Seeds
● Public: Entry point all’applicazione e del suo
l’autoloading
Laravel Mario Traetta
9. 9
Directory di un progetto Laravel (2/2)
● Resources: View e assets
● Routes: File di routing
● Storage:
● Template Blade
● Cache di file
● Altri file generabili
● Tests: File per automazione di test PHPUnit
● Vendor: Dipendenze gestite da Composter
Laravel Mario Traetta
10. 10
Nota sulla directory Storage
La sottodirectory “storage/app/public”
● File generati dagli utenti
● Accesso pubblico tramite “public/storage”
● Uso di symlink
● Comando Artisan
Laravel Mario Traetta
11. 11
Service Container
● Gestore delle dipendenze delle classi
● Buona flessibilità e scalabilità
● Basato su dependency injection
● Dipendenze “iniettabili” dentro
● Costruttori
● Metodi
Laravel Mario Traetta
12. 12
Service Container: Binding basilari
● Semplici
● Viene restituita un’istanza di dipendenza
● Singleton
● Viene restituito sempre lo stesso oggetto
● D’istanza
● Viene restituita un’istanza già creata
● Con primitive
● Per restituire oggetti con dipendenze
Laravel Mario Traetta
13. 13
Service Container: Altri binding
● Interfaccia con Implementazione
Laravel Mario Traetta
● Contestuale
● Diverse classi
● Stesse dipendenze richieste
● Diverse implementazioni offerte
● D’estensione
14. 14
Service Container: Resolving
● Ottenimento della dipendenza
richiesta
● Il container deduce cosa istanziare
● Metodi espliciti
● Metodo make
● Helper resolve
● Metodo implicito
● Automatic Injection
● Constructor-based type-hinting
Laravel Mario Traetta
15. 15
Service Provider
● Tipi
● Nativi
● Custom
● Due metodi
1) Register
2) Boot
● Tipi di binding
● Bind
● Singleton
Laravel Mario Traetta
16. 16
Service Provider: Registrazione
● “config/app.php”
● All’avvio, tutti i provider sono registrati nel service
container
● Tipi
● Standard Providers
● Registrazione all’avvio
● Deferred Providers
● Registrazione su richiesta
● Property $defer = true
Laravel Mario Traetta
17. 17
Facade
● Interfacce “statiche” a classi
● Disponibili nel service container
● Sintassi intuitiva
● Testabilità e flessibilità
● Estendono la superclasse Facade
● Differisce chiamate su “oggetto
risolto”
Laravel Mario Traetta
18. 18
Facade in tempo reale
● Possibilità di trattare ogni classe come facade
● Template “Facades<NAMESPACE><NOME_CLASSE>”→
Laravel Mario Traetta
19. 19
Contract
● Insieme di interfacce
● Definiscono i servizi principali
● Presentano varie implementazioni
● Fungono da dipendenze esplicite
● Implementabili attraverso type-
hitting
● Presentano controparti per alcune
facade
Laravel Mario Traetta
20. 20
Facade vs Contract
● Strutture più
consolidate
● Non richiedono type-
hinting
● Impiego multiplo di
esse
● Rischio di scope-creep
Laravel Mario Traetta
● Interfacce ben documentabili
● Diverse possibili
implementazioni
● Dipendenze ben tracciabili
● Basso accoppiamento
21. 21
Routing
● Definito mediante la facade “Route”
● Parameteri default con URI e Closure
● I route sono definiti in due file
● Web.php (es.: pagine Blade)
● Api.php (es.: interfacce RESTful)
● Possono ricevere input
Laravel Mario Traetta
23. 23
Routing: Altre funzionalità
Laravel Mario Traetta
● Ridirezionamento da un URI ad un altro
● Visualizzazione diretta di view per URI
● Alias di route (named route)
● Creazione mediante metodo name()
● Accessibile tramite helper route()
24. 24
Middleware
● Filtraggio di richieste HTTP
● Riadattabile per vari compiti
● Assegnabili
● Globalmente per ogni richiesta HTTP
● A route con metodo middleware
● Alcuni offerti dal framework
● Definiti in “app/Http/Kernel.php”
● Possono essere creati dai developer
Laravel Mario Traetta
25. 25
CSRF Protection
● Protegge contro attacchi CSRF (cross-site request forgery)
● Usa “token” CSRF generati automaticamente
● Ogni sessione d’utente riceve un token
● Verifica le richieste effettive dell’utente
● I token sono collegabili a:
● Form HTML5 tramite Blade Engine
● Librerie JavaScript tramite Axios HTTP
Laravel Mario Traetta
26. 26
Controller
● Logica d’applicazione
● Gestione delle richieste
● Usati solitamente per i route
● Più flessibili rispetto alle Closure
● Estendono la superclasse Controller
● La superclasse offre diversi metodi di supporto
● es.: middleware
Laravel Mario Traetta
27. 27
Modalità di definizione di Controller
1)Semplice:
● Le classi contengono diversi metodi
● I metodi possono svolgere diversi compiti
2)A singola azione:
● Presenza di un singolo metodo: “__invoke”
● Controller con una responsabilità specifica
Laravel Mario Traetta
28. 28
Middleware per Controller
● Assegnabili ai route
Laravel Mario Traetta
● Assegnabili nei costruttori
1)Dichiarazione diretta
2)Closure ad-hoc
29. 29
Resource Controller
● Controller per routing di operazioni CRUD
● Esempio → Route::resource('photos', 'PhotoController')
● I resource controller di norma hanno:
● Un set di metodi assegnati a dei route
● Metodi/route disabilitabili
Laravel Mario Traetta
30. 30
Azioni gestite dai Resource Controller
Laravel Mario Traetta
Verb URI Action Route Name
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/
{photo}/edit
edit photos.edit
PUT / PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy
31. 31
Modalità di dependency injection per Controller
1)Costruttore:
● Type-hinting della dipendenza nel costruttore
● Dipendenza risolta passata al controller
2)Metodo:
● Type-hinting nei metodi del controller
● Dipendenza risolta passata al metodo richiedente
Laravel Mario Traetta
32. 32
Request
● Dependency injection di richieste HTTP
● Type-hinting di un parametro Request
● Nessun conflitto con altri parametri
● Posizionabili dopo il parametro Request
Laravel Mario Traetta
● Type-hinting effettuabile
dentro
● Metodi di controller
● Route con closure
33. 33
Request: Path & Method
● Informazioni HTTP ottenibili
● Path della richiesta
● URL della richiesta
● Metodo della richiesta
Laravel Mario Traetta
34. 34
Request: Input retrieving
● Tutti gli input passati alle richiesta
● Input con default assegnabili
● Input di query
● Restrizione o accesso a determinati input
● Verifica dell’esistenza di input
● Supporto formati
● Array
● File
● JSON
Laravel Mario Traetta
35. 35
Request: Old input (1/2)
● Input “flashabili” tra richiesta attuale e successiva.
● Utile per
● Ripopolare form
● Recuperare sessioni
Laravel Mario Traetta
36. 36
Request: Old input (2/2)
● Ottenibili con metodo
“old”
Laravel Mario Traetta
● Generabili tramite
● Metodo di redirect “withInput”
● Metodo “flash”
● Con accesso ad alcuni input
● Con restrizione ad alcuni input
37. 37
Request: Cookie
● Modalità di accesso
● Facade “Cookie”
● Metodo “cookie”
● Allegabili alle risposte per le
richieste
● Tramite enqueing con Facade
● Tramite metodo cookie
Laravel Mario Traetta
● Generabili con l’helper cookie
38. 38
Response
● Route e controller restituiscono
risultati
● I risultati possono essere
● Semplici dati come stringhe o
array
● Oggetti di risposta HTTP
● Generabili con helper response
● Allegabili
● Header
● Cookie
Laravel Mario Traetta
39. 39
Response: Redirecting
● Redirect semplice
● Helper “redirect”
● Helper “back”
● Redirect su alias di route (“route”)
● Redirect a sito esterno (“away”)
● Redirect su controller (“action”)
● Redirect con flash dell’input (“with”)
Laravel Mario Traetta
40. 40
Response: Altri tipi di risposte
● View
Laravel Mario Traetta
● JSON
● File
● Scaricabili
● Visionabili
41. 41
View
● Pagine HTML mostrate agli utenti
● Logica di presentazione
● Utilizzabile attraverso
● Facade
● Funzione helper
● Input inseribili durante la creazione
Laravel Mario Traetta
42. 42
Database
● Supporto ufficiale a 4 DBMS
● Raw query + Query builder
● Facade DB per connessioni multiple
Laravel Mario Traetta
43. 43
Database: Utility
● Statement
● Statement specifici (CRUD)
● Statement generici (Senza return
value)
● Supporto al data type JSON
● Event listener per query
● Utility migration e seeder
● Integrazione con storage key-value
Redis
Laravel Mario Traetta
44. 44
Eloquent ORM
● Implementa l’Active Record
● Tabella DB Classe “Model”↔
● Model permette di
● Effettuare query sui dati
● Inserire nuovi record
● Modificare record
● Rimuovere record
Laravel Mario Traetta
45. 45
Eloquent ORM: Models
● Estendono la superclasse Model
● Convenzioni per la creazione
● Nome tabella plurale (Flights) Nome classe singolare↔
(Flight)
● Primary key id (autoincrement)→
Laravel Mario Traetta
47. 47
Eloquent ORM: Models Retrieving
● Modalità di selezione
● Tutti i record → <MODEL>::all()
● Record specifici → <MODEL>::where()
● N record specifici → <MODEL>::chunk()
● Singolo record → <MODEL>::find($id) o
<MODEL>::where()->first()
● I risultati restituiti possono essere
● Collection iterabili
● Eccezioni per record inesistenti
Laravel Mario Traetta
48. 48
Eloquent ORM: Altre funzionalità
● Insert
● Update
● Delete
● Rimozione effettiva dei record
● Soft delete
● Record non rimossi
● “Scartati” tramite variabile “deleted_at”
● Delete puro effettuabile
Laravel Mario Traetta
49. 49
Eloquent ORM: Relationships
● Esempio
● Blog con Post e Commenti
● Relazioni definibili
● 1 a 1
● 1 a molti
● Molti a 1 (appartenenza)
● Molti a molti
Laravel Mario Traetta
50. 50
Laradock
● Ambiente completo per sviluppo PHP
● Gestore di container tramite Docker
● Supporto a molti framework PHP
● Switch di versione PHP per progetto
● Docker Compose per applicazioni multi-
container
● Configurazione container con dockefile
Laravel Mario Traetta