Artisan
Comandi Comuni
php artisan serveAvvia il server di sviluppo
php artisan make:model Name -mCrea un model con migration
php artisan make:controller NameControllerCrea una classe controller
php artisan make:middleware NameCrea una classe middleware
php artisan migrateEsegui le migration in sospeso
php artisan migrate:rollbackAnnulla l'ultimo batch di migration
php artisan db:seedEsegui i database seeder
php artisan tinkerREPL interattivo per l'app
php artisan route:listElenca tutte le route registrate
php artisan cache:clearPulisce la cache dell'applicazione
php artisan config:clearPulisce la config in cache
php artisan queue:workAvvia l'elaborazione dei job in coda
Routing
Route di Base
Route::get('/users', [UserController::class, 'index']); Route::post('/users', [UserController::class, 'store']); Route::put('/users/{id}', [UserController::class, 'update']); Route::delete('/users/{id}', [UserController::class, 'destroy']);
Parametri e Gruppi di Route
Route::get('/user/{id}', function (int $id) { return User::findOrFail($id); }); Route::prefix('api')->middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'show']); });
Funzionalità delle Route
->name('route.name')Route con nome per la generazione di URL
->where('id', '[0-9]+')Vincolo regex sul parametro
Route::resource()Route RESTful resource (7 route)
Route::apiResource()Resource API (senza viste create/edit)
Route::fallback()Catch-all per route non corrispondenti
Controller
Controller Resource
class PostController extends Controller { public function index() { return view('posts.index', ['posts' => Post::all()]); } public function store(Request $request) { $validated = $request->validate(['title' => 'required|max:255']); Post::create($validated); return redirect()->route('posts.index'); } }
Metodi Resource
index()GET /resource -- elenca tutti
create()GET /resource/create -- mostra form
store()POST /resource -- salva nuovo
show($id)GET /resource/{id} -- mostra uno
edit($id)GET /resource/{id}/edit -- form modifica
update($id)PUT /resource/{id} -- aggiorna
destroy($id)DELETE /resource/{id} -- elimina
Template Blade
Layout e Sezioni
{{-- layouts/app.blade.php --}} @yield('content') {{-- pages/home.blade.php --}} @extends('layouts.app') @section('content')

Home

@endsection
Direttive
{{ $var }}Stampa con escape HTML
{!! $html !!}Stampa raw (senza escape)
@if / @elseif / @elseBlocchi condizionali
@foreach ($items as $item)Itera su una collezione
@forelse / @emptyCiclo con fallback per lista vuota
@include('partial')Include un'altra vista Blade
@component / @slotComponenti Blade riutilizzabili
@csrfCampo nascosto con token CSRF
@auth / @guestVerifica lo stato di autenticazione
@error('field')Mostra errore di validazione
Eloquent ORM
Basi del Model
class Post extends Model { protected $fillable = ['title', 'body', 'user_id']; public function user() { return $this->belongsTo(User::class); } }
Query
Post::all(); // all records Post::find(1); // by primary key Post::where('status', 'published')->get(); Post::where('views', '>', 100)->orderBy('created_at', 'desc')->first();
Operazioni CRUD
$post = Post::create(['title' => 'New', 'body' => '...']); $post->update(['title' => 'Updated']); $post->delete(); Post::destroy([1, 2, 3]); // delete by IDs
Relazioni
hasOneUno-a-uno (User -> Phone)
hasManyUno-a-molti (Post -> Comments)
belongsToInverso di hasOne/hasMany
belongsToManyMolti-a-molti con tabella pivot
hasManyThroughHas-many tramite model intermedio
Migration
Creazione di Tabelle
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('title'); $table->text('body')->nullable(); $table->timestamps(); });
Tipi di Colonna
$table->id()Chiave primaria BIGINT auto-incrementante
$table->string('col', 100)VARCHAR con lunghezza opzionale
$table->text('col')Colonna TEXT
$table->integer('col')Colonna INTEGER
$table->boolean('col')Colonna BOOLEAN
$table->json('col')Colonna JSON
$table->timestamp('col')Colonna TIMESTAMP
$table->timestamps()created_at e updated_at
$table->softDeletes()deleted_at per soft delete
Middleware
Middleware Personalizzato
class EnsureAdmin { public function handle(Request $request, Closure $next) { if (! $request->user()?->is_admin) { abort(403); } return $next($request); } }
Registrazione e Utilizzo
// bootstrap/app.php ->withMiddleware(function (Middleware $middleware) { $middleware->alias(['admin' => EnsureAdmin::class]); }) // In routes Route::get('/admin', fn() => '...')->middleware('admin');
Middleware Built-in
authRichiede autenticazione
guestReindirizza se autenticato
throttle:60,1Limite di frequenza (60 req/min)
verifiedRichiede verifica email
signedValida URL firmato
Autenticazione
Helper Auth
Auth::check(); // is user logged in? Auth::user(); // current User model Auth::id(); // current user ID Auth::attempt(['email' => $e, 'password' => $p]); Auth::logout();
Starter Kit
Laravel BreezeScaffolding auth minimale (Blade o Inertia)
Laravel JetstreamCompleto (team, 2FA, API token)
SanctumAutenticazione tramite token per SPA/mobile
PassportImplementazione completa del server OAuth2
Protezione delle Route
Route::middleware('auth')->group(function () { Route::get('/dashboard', [DashController::class, 'index']); });
Validazione
Validazione nel Controller
$validated = $request->validate([ 'title' => 'required|string|max:255', 'email' => 'required|email|unique:users', 'age' => 'nullable|integer|min:0', ]);
Form Request
class StorePostRequest extends FormRequest { public function rules(): array { return [ 'title' => 'required|max:255', 'body' => 'required|min:10', ]; } }
Regole Comuni
requiredCampo obbligatorio e non vuoto
string | integer | booleanValidazione del tipo
min:N | max:NLunghezza o valore minimo/massimo
emailFormato email valido
unique:table,columnDeve essere unico nella tabella DB
exists:table,columnDeve esistere nella tabella DB
in:a,b,cDeve essere uno dei valori elencati
confirmedRichiede il campo _confirmation corrispondente
date | after:dateValidazione della data
Pattern Comuni
Risposta API
return response()->json(['data' => $users], 200); return response()->json(['error' => 'Not found'], 404);
Ambiente e Configurazione
env('APP_KEY'); // read .env value config('app.name'); // read config value config(['app.debug' => true]); // set at runtime
Helper Utili
route('name', $params)Genera URL per route con nome
redirect()->route('name')Reindirizza a route con nome
back()->withErrors()Torna indietro con errori di validazione
abort(404)Lancia un'eccezione HTTP
collect($array)Crea una Collection da un array
now()Datetime Carbon corrente
cache()->remember()Mette in cache un valore con TTL