Indice
Una veloce introduzione framework Laravel
Autore: Fabio Di Matteo
Ultima revisione: 16/09/2026 11:23
Prima di tuffarci nell'azione teniamo a mente che Laravel è un framework PHP open source per sviluppare applicazioni web in modo rapido e ordinato, seguendo il pattern MVC. Offre strumenti per routing, database, autenticazione, validazione e template, semplificando la creazione di siti e API. E' molto ricco di funzionalità e questo forse innalza un pochino la curva di apprendimento.
Principali elementi di Laravel
| Ruolo | Descrizione | Esempio in Laravel | Percorso file esempio |
|---|---|---|---|
| Model | Gestisce i dati e la logica di business | User, Post, Product | app/Models/User.php, app/Models/Post.php |
| View | Mostra l’interfaccia all’utente | file Blade | resources/views/ |
| Controller | Riceve le richieste e coordina Model e View | UserController, PostController | app/Http/Controllers/ |
| Route | Associa URL a controller o closure | file routes | routes/web.php, routes/api.php |
| Middleware | Filtra richieste prima che arrivino al controller | auth, throttle | app/Http/Middleware/ |
| Service | Incapsula logica complessa riutilizzabile | classi di servizio | app/Services/ |
| Request | Valida e prepara i dati in ingresso | FormRequest | app/Http/Requests/ |
| Repository | Astrazione per accesso ai dati | pattern architetturale | spesso in app/Repositories/ |
| Helper / Facade | Accesso rapido a servizi del framework | DB, Cache, Auth | usati direttamente nel codice |
Di seguito metteremo su un piccolo progetto di esempio. Creo un'agenda che gestisce una tabella sqlite con soli 2 campi “nominativo” e “email”.
1) Crea il progetto
composer create-project laravel/laravel agenda cd agenda
2) Configura SQLite
Crea il file del database:
touch database/database.sqlite
Poi apri
.env
e imposta:
DB_CONNECTION=sqlite DB_DATABASE=/percorso/assoluto/del/progetto/database/database.sqlite
Su Windows puoi usare un percorso tipo:
DB_DATABASE=C:\path\to\agenda\database\database.sqlite
3) Crea migration e model
php artisan make:model Contatto -m
Apri la migration in
database/migrations/...create_contattos_table.php
e metti:
public function up(): void { Schema::create('contattos', function (Blueprint $table) { $table->id(); $table->string('nominativo'); $table->string('email')->unique(); $table->timestamps(); }); }
4) Esegui le migrazioni
php artisan migrate
5) Crea controller
php artisan make:controller ContattoController --resource
6) Aggiungi il model
In
app/Models/Contatto.php
:
class Contatto extends Model { protected $fillable = ['nominativo', 'email']; }
7) Definisci le rotte
In
routes/web.php
:
use App\Http\Controllers\ContattoController; Route::get('/', [ContattoController::class, 'index']); Route::resource('contatti', ContattoController::class);
8) Completa il controller
In
app/Http/Controllers/ContattoController.php
:
use App\Models\Contatto; use Illuminate\Http\Request; public function index() { $contatti = Contatto::all(); return view('contatti.index', compact('contatti')); } public function create() { return view('contatti.create'); } public function store(Request $request) { $request->validate([ 'nominativo' => 'required|string|max:255', 'email' => 'required|email|unique:contattos,email', ]); Contatto::create($request->only('nominativo', 'email')); return redirect()->route('contatti.index'); }
9) Crea le viste
Crea la cartella:
mkdir -p resources/views/contatti
resources/views/contatti/index.blade.php
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Agenda</title> </head> <body> <h1>Agenda contatti</h1> <a href="{{ route('contatti.create') }}">Nuovo contatto</a> <ul> @foreach($contatti as $contatto) <li>{{ $contatto->nominativo }} - {{ $contatto->email }}</li> @endforeach </ul> </body> </html>
resources/views/contatti/create.blade.php
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Nuovo contatto</title> </head> <body> <h1>Nuovo contatto</h1> <form action="{{ route('contatti.store') }}" method="POST"> @csrf <div> <label>Nominativo</label> <input type="text" name="nominativo" value="{{ old('nominativo') }}"> @error('nominativo') <p>{{ $message }}</p> @enderror </div> <div> <label>Email</label> <input type="email" name="email" value="{{ old('email') }}"> @error('email') <p>{{ $message }}</p> @enderror </div> <button type="submit">Salva</button> </form> </body> </html>
10) Avvia il server
php artisan serve
Vai su:
http://127.0.0.1:8000
