SlideShare a Scribd company logo
1 of 51
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
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
3
Installazione Laravel
Laravel Mario Traetta
Artisan CLI
Blade
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
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
Blade
● Template engine ufficiale
● “.blade.php”
● Localizzazione
● Layout
● Riuso
● Estensione
Laravel Mario Traetta
7
Blade: strutture di controllo
● Direttive
● If
● Switch
● Loop
● Commenti
● Embedded PHP
● Token CSRF
Laravel Mario Traetta
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
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
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
Service Container
● Gestore delle dipendenze delle classi
● Buona flessibilità e scalabilità
● Basato su dependency injection
● Dipendenze “iniettabili” dentro
● Costruttori
● Metodi
Laravel Mario Traetta
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
Service Container: Altri binding
● Interfaccia con Implementazione
Laravel Mario Traetta
● Contestuale
● Diverse classi
● Stesse dipendenze richieste
● Diverse implementazioni offerte
● D’estensione
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
Service Provider
● Tipi
● Nativi
● Custom
● Due metodi
1) Register
2) Boot
● Tipi di binding
● Bind
● Singleton
Laravel Mario Traetta
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
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
Facade in tempo reale
● Possibilità di trattare ogni classe come facade
● Template “Facades<NAMESPACE><NOME_CLASSE>”→
Laravel Mario Traetta
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
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
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
22
Routing: Metodi HTTP
● GET
● POST
● PUT
● PATCH
● DELETE
● OPTIONS
Laravel Mario Traetta
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
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
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
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
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
Middleware per Controller
● Assegnabili ai route
Laravel Mario Traetta
● Assegnabili nei costruttori
1)Dichiarazione diretta
2)Closure ad-hoc
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
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
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
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
Request: Path & Method
● Informazioni HTTP ottenibili
● Path della richiesta
● URL della richiesta
● Metodo della richiesta
Laravel Mario Traetta
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
Request: Old input (1/2)
● Input “flashabili” tra richiesta attuale e successiva.
● Utile per
● Ripopolare form
● Recuperare sessioni
Laravel Mario Traetta
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
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
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
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
Response: Altri tipi di risposte
● View
Laravel Mario Traetta
● JSON
● File
● Scaricabili
● Visionabili
41
View
● Pagine HTML mostrate agli utenti
● Logica di presentazione
● Utilizzabile attraverso
● Facade
● Funzione helper
● Input inseribili durante la creazione
Laravel Mario Traetta
42
Database
● Supporto ufficiale a 4 DBMS
● Raw query + Query builder
● Facade DB per connessioni multiple
Laravel Mario Traetta
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
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
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
46
Eloquent ORM: Models Properties
● Campi ad accesso limitabile
● guarded
● fillable
● Timestamps disabilitabili
● created_at
● updated_at
Laravel Mario Traetta
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
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
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
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
Fine
Grazie a tutti i partecipanti per l’attenzione.

More Related Content

Similar to Laravel from scratch

Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsClaudio Mignanti
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiGiuneco S.r.l
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataSynapta
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataDavide Allavena
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communicationVittorio Conte
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 

Similar to Laravel from scratch (20)

OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
Thesis
ThesisThesis
Thesis
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejs
 
Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9
 
node.js everywhere
node.js everywherenode.js everywhere
node.js everywhere
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
 
Corso 3 giorni Angular 2+
Corso 3 giorni Angular 2+Corso 3 giorni Angular 2+
Corso 3 giorni Angular 2+
 
Net core base
Net core baseNet core base
Net core base
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communication
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Esempi pratici
Esempi praticiEsempi pratici
Esempi pratici
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 

Laravel from scratch

  • 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
  • 3. 3 Installazione Laravel Laravel Mario Traetta Artisan CLI Blade
  • 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
  • 22. 22 Routing: Metodi HTTP ● GET ● POST ● PUT ● PATCH ● DELETE ● OPTIONS 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
  • 46. 46 Eloquent ORM: Models Properties ● Campi ad accesso limitabile ● guarded ● fillable ● Timestamps disabilitabili ● created_at ● updated_at 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
  • 51. Fine Grazie a tutti i partecipanti per l’attenzione.