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.
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.
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.
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()).
// 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
[ ] Implementazione e registrazione di Service Provider custom
[ ] Gestione degli Eventi e dei Listener
[ ] Creazione e utilizzo di Job in code asincrone (Queue)