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