illuminate/http
Illuminate Http provides Laravel’s HTTP layer: a rich Request and Response API, input and file handling, headers/cookies, sessions, redirects, and helpers for working with Symfony HTTP components. Useful for building middleware and controllers cleanly.
The illuminate/http package is Laravel’s core HTTP abstraction layer—used daily via Request and Response classes, but rarely instantiated directly. Start by:
Request usage (e.g., store(Request $request)).illuminate/http docs.Request into a controller method and use $request->input(), $request->validate(), or $request->user().Request type-hints for automatic population of user input, query strings, cookies, headers, and uploaded files:
public function update(Request $request, User $user)
{
$user->fill($request->validate([
'name' => 'sometimes|string|max:255',
'email' => 'sometimes|email|unique:users,email,' . $user->id,
]));
$user->save();
}
response()->json() or response()->view() over manually constructing Response. Chain headers, cookies, and status codes:
return response()
->json(['error' => 'Not found'], 404)
->withHeaders(['X-Request-Id' => Str::uuid()]);
FormRequest for validation/authorization separation—store() and update() share logic via Request inheritance but enforce different rules:
// app/Http/Requests/StoreUserRequest.php
public function rules(): array
{
return ['email' => 'required|email|unique:users'];
}
TestResponse assertions on responses from get(), postJson(), etc.:
$response = $this->getJson('/api/users');
$response->assertStatus(200)->assertJsonCount(10, 'data');
illuminate/http provides Response/Request, use Http::retry() (built on Guzzle) for outbound calls—this uses illuminate/http for parsing responses:
$response = Http::retry(3, 100)->post('https://api.example.com/users', $payload);
$userId = $response->json('id');
new Request($_GET, $_POST, ..., $_COOKIE)—this bypasses Laravel’s Request::capture() and request lifecycle setup. Use Request::createFromBase() if absolutely necessary (e.g., console commands triggering HTTP context).validate() throws ValidationException—not 422 directly—handled globally by Laravel’s exception renderer. In API tests, assert for 422 only after Laravel’s ValidationException handler runs.$request->file('avatar') returns UploadedFile—always verify with $file->isValid() before operations. Skipping this risks security or errors.->header('Content-Type') won’t work—use lowercase or let Laravel normalize: ->header('content-type', 'application/json').Request/Response are macroable,macros added via Request::macro() break PHPStan/Psalm unless cast to mixed. Prefer helpers like request()->safe() for clarity.trustedproxies causes $request->ip() to return the proxy’s IP—not the client’s. Set TRUSTED_PROXIES='*' (dev) or explicit IPs in production.withHeaders(['X-API-Key' => 'secret'])— Laravel translates this into Request headers before route/controller binding, crucial for auth middleware tests.How can I help you explore Laravel packages today?