2. Corso Laravel di B. Ferrari2
Laravel
Laravel è un Framework PHP free e opensource, creato da
Taylor Oftwell, ideato per applicazioni Web MVC basato su
Symphony.
Si interfaccia con database relazionali tramite ORM (Object
Relational Mapper) e ha un sistema di routing estremamente
flessibile e configurabile.
3. Corso Laravel di B. Ferrari3
MVC
MVC è l’acronimo di Model View Controller, rappresenta
l’architettura adottata dagli sviluppatori per lo sviluppo del
software. Questo pattern separa l’applicazione in 3 parti, il
model, la view e il controller.
Il Model gestisce il comportamento di base e la gestione dei
dati dell’applicazione. La View gestisce l’interfaccia grafica e
renderizza i dati in una forma tale che questi vengano
visualizzati correttamente. I Controller ricevono gli input
dall’utente, mettono in comunicazione i model con le view.
5. Corso Laravel di B. Ferrari5
ORM
Object-relational mapping è una tecnica per convertire tipi usando un
linguaggio orientato agli oggetti. Viene spesso usato con database
relazionali per renderli compatibili con modelli ad oggetti.
ES. SQL query
SELECT * FROM Flights WHERE active = 1 ORDER BY name
Es. Laravel ORM
$flights = AppFlight::where('active', 1)
->orderBy('name')
->get();
6. Corso Laravel di B. Ferrari6
Composer
Composer è uno strumenti per gestire dipendenze fra i
componenti software PHP, detto Dependency management.
Laravel utilizza Composer per gestire le proprie dipendenze.
Prima di poter utilizzare Laravel è necessario essere sicuri di
avere installato composer sulla propria macchina.
7. Corso Laravel di B. Ferrari7
1 Installare Laravel
Su Windows
1. Installare XAMPP (https://www.apachefriends.org/)
2. Installare Composer (https://getcomposer.org/)
3. Riavviare
4. Installare laravel comando da dos: “composer global require
laravel/installer”
5. Creazione progetto dalla cartella di root (htdocs) su windows
C:xampphtdocs, es “laravel new FirstProject” dove FirstProject è
il nome del nostro primo progetto
6. Lanciare progetto aprire nel browser
http://localhost/FirstProject/public/
9. Corso Laravel di B. Ferrari9
1- Debug con Visual Studio Code
1 – Scaricare e installare Visual Studio Code da https://code.visualstudio.com/
2- Installare PHP debugging exension, per fare ciò dal menu principale scegliere View →
Extension → PHP Debug (Felix Beker)
3 – Lanciare Apache da XMPP Control Panel
4 – Scaricare xdebug Aprire url localhost/dashboard/phpinfo.php da questa pagina capiamo
che versione di php abbiamo installato, visitiamo il sito xdebug.org/download e scarichiamo la dll
corrispondente (es.php_xdebug-2.9.5-7.4-vc15-x86_64.dll)
5 - Installare xdebug andiamo a copiare la dll scaricata prima nella directory delle estensioni di
php (nel mio caso C:xamppphpext)
6 – Apriamo php.ini e aggiungiamo la configurazione per abilitare XDEBUG
[XDEBUG]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
zend_extension = C:xamppphpextphp_xdebug-2.9.5-7.4-vc15-x86_64.dll
10. Corso Laravel di B. Ferrari10
2- Debug con Visual Studio Code
7 – Verifica installazione: riavviamo il Apache e apriamo da
browser localhost/dashboard/phpinfo.php dovremmo vedere
l’estensione abilitata
11. Corso Laravel di B. Ferrari11
3- Debug con Visual Studio Code
8 – Configurazione Debug Apriamo un progetto PHP (es. apriamo una cartella C:xampp
htdocstestdebug conentente file index.php ) da icona debug o ctrl+shift+ D e aggiungiamo
configurazione per il debug cliccando su “create lunch.json file” e selezionare environment
PHP
13. Corso Laravel di B. Ferrari13
4- Debug con Visual Studio Code
9 – Avviare il debug premere tasto debug e Run listen for xDebug e aprire da
broswer il progetto che stiamo usando (es. http://localhost/testdebug) ora
impostando un breakpoint dovremmo osservare che all’apertura della pagina il
debug inizi a funzionare
14. Corso Laravel di B. Ferrari14
Struttura dell’applicazione
La struttura dell’applicazione è composta del cartelle e sotto
cartelle incluse in un progetto.
App è la cartella che contiene buona parte dei sorgenti
dell’applicazione model e controller;
- apphttpcontrollers dove sono presenti controllers;
- appresources qui troviamo i file per gli assets html, views e le
risorse l’internazionalizzazione;
- routes qui troviamo i punti di accesso all’applicazione web
- databasemigrations qui troviamo gli script di migrazione,
ovvero, gli script che permettono di trasformare il database in nelle
varie versioni necessarie per lo sviluppo dell’applicazione;
16. Corso Laravel di B. Ferrari16
Blade
Blade è un semplice e allo stesso potente mezzo che laravel
ci mette a disposizione per risolvere il problema dei template
in PHP.
I template permetto di non ripetere e di riutilizzare parti di
codice all’interno delle view.
Le view blade terminano con estensione .blade.php e sono
salvate tipicamente nella cartella resources/views
17. Corso Laravel di B. Ferrari17
1- Esempio view
Posso creare una view come salvata come
resources/views/greeting.blade.php
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
18. Corso Laravel di B. Ferrari18
2- Esempio view
Posso mostrare la view precedente da una route
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
Quello che accadrà è che verrà mostrata la pagina greeting e
al posto di {{ $name }} verrà sostituito con James
19. Corso Laravel di B. Ferrari19
1 - Blade definizione layout
I due benefici principali che blade apporta alle nostre
applicazione sono l’eredità e le sezioni.
Le view blade contengono HTML arricchito dalle direttive
@section, @yeld, @exetends e @parent.
20. Corso Laravel di B. Ferrari20
Ereditarietà e override di campi
In una view padre possono definire un titolo così:
@yield('title', 'Default Title');
Questo vuoldire che se alla view sarà definito ‘title’ verrà
mostrato ‘Default Title’.
Nella view figlio possono impostare title
@section('title','Custom Title')
21. Corso Laravel di B. Ferrari21
Ereditarietà e ovverride di sezioni html
In una view padre possono definire una sezione html così:
@section('some_div')
<h1>Default Heading1</h1>
<p>Default Paragraph <span>Default Span</span> </p>
@show
In una view figlia possono ridefinire una sezione html così:
@section('some_div')
@parent
<h1>Custom Heading1</h1>
<p>Custom Paragraph <span>Custom Span</span> </p>
@endsection
@parent mi permette di ripetere la sezione del padre nella view figlia
22. Corso Laravel di B. Ferrari22
Es. View padre
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
<!-- Salvato in resources/views/layouts/app.blade.php -->
23. Corso Laravel di B. Ferrari23
Es. View Figlio
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
<!-- salvato in resources/views/child.blade.php -->
24. Corso Laravel di B. Ferrari24
1 - Laravel 7 CRUD MySQL
1) Installare Laravel
composer create-project --prefer-dist laravel/laravel Blog
2) Creare database laravel e configurare credenziali database
Aprire il file .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=il nome del tuo database (laravel)
DB_USERNAME=il nome utente del tuo database (root)
DB_PASSWORD=la password del tuo database
25. Corso Laravel di B. Ferrari25
2 - Laravel 7 CRUD MySQL
3) Generare Model e Migrazione
Generiamo la tabella “product” e il suo migration file usando il
seguente comando:
php artisan make:model Product -m
Questo comando permette di creare un model con nome Product e
il migraton file per la tabella product con lla data corrente in
database/migrations/
2020_05_18_124707_create_products_table.php
In questo file andiamo ad inserire il seguente codice che ci
permette di creare una nuova tabella con campi id, title,
product_code, description e i timestamp (created_at e updated_at).
27. Corso Laravel di B. Ferrari27
4 - Laravel 7 CRUD MySQL
4 – Migrare ora per ottenere la creazione della tabella
eseguiamo la migrazione, con il seguente comando:
php artisan migrate
Questo ci permette di aggiornare il database all’ultima
versione, eseguendo un’operazione di migrazione ovvero una
trasformazione da una struttura del database a un’altra
28. Corso Laravel di B. Ferrari28
5 - Laravel 7 CRUD MySQL
5- Fillable property questo ci permette di determinare i campi
modificabili nella nostra tabella durante le operazioni di crud,
quindi aggiungiamo il seguente codice nel Model Product file
app/product.php
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Product extends Model
{
protected $fillable = [
'title',
'product_code',
'description',
];
}
29. Corso Laravel di B. Ferrari29
6 - Laravel 7 CRUD MySQL
6 – Resoruce route e Controller questo operazione ci
permette di creare il controller ProductController e al suo
interno i 7 metodi creati di default index, store, create, update,
destroy show e edit
php artisan make:controller ProductController --resource
Dopo questo comando eseguiamo una risorsa nel file di route,
quindi andiamo nel file routes/web.php e inseriamo il codice
seguente.
30. Corso Laravel di B. Ferrari30
Metodi controller
HTTP Verb Path (URL) Action (Method) Route Name
GET /product index product.index
GET /product/create create product.create
POST /product store product.store
GET /product/{id} show product.show
GET /product/{id}/edit edit product.edit
PUT/PATCH /product/{id} update product.update
DELETE /product/{id} destroy product.destroy
31. Corso Laravel di B. Ferrari31
7 - Laravel 7 CRUD MySQL
<?php
Route::get('/', function () {
return view('welcome');
});
Route::resource('products', 'ProductController');
32. Corso Laravel di B. Ferrari32
8 - Laravel 7 CRUD MySQL
8 – Implementazione del Controller:
Abbiamo ottenuto il controller con i vari metodi CRUD
dichiarati ma non implementati, quindi ora ci serve
implementare il metodi del controller
Apriamo il file del controller
app/HTTP/Controller/ProductController e andiamo a riempire i
metodi generato con il codice seguente.
33. Corso Laravel di B. Ferrari33
9 - Laravel 7 CRUD MySQL
namespace AppHttpControllers;
use AppProduct;
use IlluminateHttpRequest;
use Redirect;
use PDF;
class ProductController extends Controller
{
public function index()
{
$data['products'] = Product::orderBy('id','desc')->get();
return view('product.list',$data);
}
34. Corso Laravel di B. Ferrari34
10 - Laravel 7 CRUD MySQL
public function create()
{
return view('product.create');
}
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'product_code' => 'required',
'description' => 'required',
]);
Product::create($request->all());
return Redirect::to('products')
->with('success','Greate! Product created successfully.');
}
35. Corso Laravel di B. Ferrari35
10.1 - Laravel 7 CRUD MySQL
Action Create si preoccupa di mostrare la view
product.create tramite l’istruzione return view('product.create');
Action Store prende in ingresso un oggetto di tipo Request
che contiene i dati provenienti dalla form presente nella view
product.create. Questi dati vengono validati tramite metodo
validate, se la validazione fallisce verrà mostrata la
view.create con un oggetto $errors contente gli errori generati
dalla validazione.
Se la validazione va a buon fine viene eseguito il metodo
create del model Product e ad esso vengono passati i dati per
eseguire la query di insert a database
36. Corso Laravel di B. Ferrari36
11 - Laravel 7 CRUD MySQL
public function edit($id)
{
$where = array('id' => $id);
$data['product_info'] = Product::where($where)->first();
return view('product.edit', $data);
}
37. Corso Laravel di B. Ferrari37
11 - Laravel 7 CRUD MySQL
public function update(Request $request, $id)
{
$request->validate([
'title' => 'required',
'product_code' => 'required',
'description' => 'required',
]);
$update = ['title' => $request->title, 'description' => $request->description];
Product::where('id',$id)->update($update);
return Redirect::to('products')
->with('success','Great! Product updated successfully');
}
public function destroy($id)
{
Product::where('id',$id)->delete();
return Redirect::to('products')->with('success','Product deleted successfully');
}
}
38. Corso Laravel di B. Ferrari38
11.1 - Laravel 7 CRUD MySQL
Action Edit mostra recupera i dati del prodotto attraverso il
suo id, li passa alla view product.edit
Action Update riceve i dati del prodotto dalla view
product.edit esegue la validazione e se questa va buon fine
esegue l’aggiornamento dei dati a database tramite istruzione
Product::where('id',$id)->update($update);
39. Corso Laravel di B. Ferrari39
12 - Laravel 7 CRUD MySQL
9 – Implementazione delle view: a questo punto andremo a
comporre le views. Andiamo a creare una cartella product
all’interno della cartella app/resources/views/. Creiamo 4 files
- Layout.blade.php che andrà a contenere il layout principale
dell’applicazione
- List.blade.php la view che conterrà la lista dei prodotti
- Create.blade.php che conterrà la view per la creazione di
un prodotto
- Edit.blate.php che conterrà il modulo per editare un prodotto
44. Corso Laravel di B. Ferrari44
13 - Laravel 7 CRUD MySQL
10 – Lancio dell’applicativo a questo punto possiamo
lanciare l’applicativo usando il comando
php artisan serve --port=8080
E visualizzare il risultato nel browser all’indirizzo
http://localhost:8080/products
45. Corso Laravel di B. Ferrari45
Esercizio
Aggiunger per ogni riga delle tabella un pulsante che
mostra attraverso il metodo show tutti i dati della riga
selezionata