Laravel — Cheat Sheet

Tag: laravel, php, framework, mvc, eloquent, blade, artisan

Livello: intermedio

TL;DR: Appunti essenziali sul framework PHP Laravel, focalizzati su architettura MVC, ORM Eloquent, routing e pattern di sviluppo moderni.

Concetti chiave

Pattern MVC: separazione netta tra Model (Eloquent), View (Blade) e Controller.

Routing avanzato: supporto per route model binding, middleware, gruppi e resource controller.

Eloquent ORM: implementazione del pattern Active Record per un'interazione fluida e a oggetti con il database.

Artisan CLI: strumento a riga di comando per generare boilerplate, eseguire migrazioni e gestire task programmati.

Service Container: sistema per la gestione delle dipendenze e l'implementazione della dependency injection.

Middleware: meccanismo per filtrare le richieste HTTP in ingresso (es. autenticazione, logging).

Blade: motore di templating che compila le viste in codice PHP nativo, supportando ereditarietà e componenti.

Migrations: sistema di versionamento per lo schema del database.

Mass Assignment: protezione nativa contro l'assegnazione massiva indesiderata tramite le proprietà $fillable o $guarded.

Mutators e Accessors: metodi per trasformare i valori degli attributi di Eloquent in fase di lettura o scrittura.

Domande tipiche e risposte pronte

Q: Cos'è il Service Container e come lo utilizzi?R: È il cuore di Laravel che gestisce le dipendenze delle classi. Lo uso per l'auto-risoluzione delle dipendenze nei controller o tramite i Service Provider per registrare implementazioni specifiche.

Q: Come risolvi il problema N+1 in Eloquent?R: Utilizzo l'eager loading con il metodo with('relazione') per caricare le relazioni in un'unica query anziché eseguire una query aggiuntiva per ogni record iterato.

Q: Qual è la differenza tra Query Builder ed Eloquent?R: Il Query Builder permette di scrivere query SQL dirette e ottimizzate con un'interfaccia fluente. Eloquent mappa le tabelle in oggetti, semplificando le relazioni ma aggiungendo un leggero overhead di memoria.

Q: Come gestisci la sicurezza e i form in Laravel?R: Laravel include nativamente la protezione CSRF (usando @csrf nei form Blade) e utilizza PDO per prevenire automaticamente le SQL injection. Le validazioni vengono gestite tramite le Form Request.

Insidie e errori comuni

Dimenticare di proteggere i modelli contro il mass assignment, scatenando la MassAssignmentException.

Inserire logica di business complessa o query al database direttamente nei file Blade.

Eseguire php artisan config:cache in ambiente di sviluppo, rendendo illeggibili le modifiche al file .env.

Abusare di Eloquent per query di reportistica massive che causano esaurimento della memoria (meglio usare il Query Builder o chunk()).

Snippet e comandi

// Definizione di una rotta con middleware e controller
Route::get('/dashboard', [DashboardController::class, 'index'])
    ->middleware(['auth', 'verified'])
    ->name('dashboard');

// Definizione di una relazione uno a molti in un modello Eloquent
public function posts()
{
    return $this->hasMany(Post::class);
}

// Esempio di Eager Loading per evitare il problema N+1
$users = User::with('posts')->get();

// Validazione base in un controller
$validated = $request->validate([
    'title' => 'required|string|max:255',
    'body' => 'required',
]);

Bash

# Genera modello, migrazione, seeder, factory e resource controller
php artisan make:model Post -a

# Esegue le migrazioni azzerando il database e lancia i seeder
php artisan migrate:fresh --seed

# Svuota la cache di configurazione e rotte (utile per il deploy)
php artisan optimize:clear

Da ripassare

[ ] Implementazione e registrazione di Service Provider custom

[ ] Gestione degli Eventi e dei Listener

[ ] Creazione e utilizzo di Job in code asincrone (Queue)

Jarvis Interviews
Jarvis