Illuminate\Http\Request è la classe che consente di gestire in modo orientato agli oggetti le richieste HTTP ricevute dall’applicazione.
Ti dà accesso a tutte le informazioni contenute nella richiesta: dati del form, query string, file, header e altro.
Se annoti con il tipo Illuminate\Http\Request un metodo di un controller, il service container di Laravel inietta automaticamente l’istanza della request.
<?phpnamespace App\Http\Controllers;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;class UserController extends Controller{ public function store(Request $request): RedirectResponse { $name = $request->input('name'); // Logica per salvare l'utente... return redirect('/users'); }}
Puoi usare il type hint allo stesso modo anche nelle closure delle route.
use Illuminate\Http\Request;Route::get('/', function (Request $request) { // ...});
Se un metodo controller riceve anche parametri di route, scrivili dopo Request.
use App\Http\Controllers\UserController;Route::put('/user/{id}', [UserController::class, 'update']);
public function update(Request $request, string $id): RedirectResponse{ // Accedi ai dati della richiesta con $request e al parametro di route con $id return redirect('/users');}
Il metodo query recupera valori solo dalla query string (dopo il ? nell’URL).
$name = $request->query('name');$name = $request->query('name', 'Helen');// Ottieni tutta la query string come array$query = $request->query();
input considera sia il corpo della richiesta sia la query string, mentre query considera solo la query string.
Usa query se vuoi distinguere i dati POST dai parametri URL.
// Ottieni il path (es. "foo/bar")$uri = $request->path();// Verifica se corrisponde a un pattern (puoi usare il wildcard *)if ($request->is('admin/*')) { // ...}// Verifica se corrisponde a una route con nomeif ($request->routeIs('admin.*')) { // ...}
Con il metodo store salvi il file nello storage.
Il nome del file viene generato automaticamente.
// Salva nella directory "images" del disk predefinito$path = $request->photo->store('images');// Salva su S3$path = $request->photo->store('images', 's3');
Esempio di ricezione in un controller dei dati di un form di registrazione utente.
<?phpnamespace App\Http\Controllers;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;class RegisterController extends Controller{ public function store(Request $request): RedirectResponse { // Ottieni i dati del form $name = $request->input('name'); $email = $request->input('email'); $password = $request->input('password'); // Ottieni solo i dati necessari $data = $request->only(['name', 'email', 'password']); // Logica per creare l'utente... return redirect('/dashboard'); }}
Definisci la route corrispondente.
use App\Http\Controllers\RegisterController;Route::post('/register', [RegisterController::class, 'store']);