HTTP Requests
ZephyrPHP provides a powerful, user-friendly Request class for handling all incoming HTTP request data including input, files, headers, and more.
Accessing the Request
Access the current request instance in multiple ways:
use ZephyrPHP\Core\Http\Request;
// In a controller (via $this->request)
public function store()
{
$name = $this->request->input('name');
}
// Get singleton instance
$request = Request::getInstance();
// Capture current request
$request = Request::capture();
// Using helper function
$name = request('name');
Retrieving Input
Basic Input
// Get all input (query + post + json merged)
$all = $request->all();
// Get specific input with default
$name = $request->input('name');
$email = $request->input('email', 'default@example.com');
// Using dot notation for nested values
$street = $request->get('address.street');
// Get query string parameters only
$page = $request->query('page', 1);
$allQuery = $request->query();
// Get POST data only
$data = $request->post('data');
$allPost = $request->post();
Input Filtering
// Get only specific keys
$credentials = $request->only(['email', 'password']);
// Get all except specific keys
$data = $request->except(['_token', '_method']);
// Collect inputs into array
$userData = $request->collect(['name', 'email', 'phone']);
Checking Input Existence
// Check if input exists (may be empty)
if ($request->has('name')) { }
// Check if multiple keys exist
if ($request->has(['email', 'password'])) { }
// Check if any key exists
if ($request->hasAny(['email', 'phone'])) { }
// Check if input exists and is not empty
if ($request->filled('name')) { }
// Check if input is missing
if ($request->missing('optional_field')) { }
// Conditional callbacks
$request->whenFilled('email', function ($email) {
// Do something with email
}, function () {
// Email was empty
});
$request->whenHas('callback_url', function ($url) {
// Process callback URL
});
Input Casting
Cast input values to specific types automatically:
// String
$name = $request->string('name');
$name = $request->string('name', 'Anonymous');
// Integer
$page = $request->integer('page');
$page = $request->integer('page', 1);
// Float
$price = $request->float('price');
$price = $request->float('price', 0.00);
// Boolean (handles 'true', '1', 'yes', 'on', etc.)
$remember = $request->boolean('remember');
$active = $request->boolean('active', false);
// Array (handles JSON strings and comma-separated values)
$tags = $request->array('tags');
$ids = $request->array('ids', []);
// Date
$date = $request->date('published_at');
$date = $request->date('event_date', 'Y-m-d');
$date = $request->date('meeting_time', 'H:i', 'America/New_York');
// Enum (PHP 8.1+)
$status = $request->enum('status', OrderStatus::class);
$priority = $request->enum('priority', Priority::class, Priority::Normal);
Sanitized Input
// Get sanitized input by type
$email = $request->sanitized('email', 'email');
$id = $request->sanitized('id', 'integer');
$url = $request->sanitized('website', 'url');
$slug = $request->sanitized('slug', 'slug');
$name = $request->sanitized('name', 'string');
$price = $request->sanitized('price', 'float');
File Uploads
Handle file uploads with the UploadedFile class:
// Check if file was uploaded
if ($request->hasFile('avatar')) {
$file = $request->file('avatar');
}
// Get single file
$file = $request->file('document');
// Get all uploaded files
$files = $request->allFiles();
UploadedFile Methods
$file = $request->file('avatar');
// File information
$file->getClientOriginalName(); // 'photo.jpg'
$file->getClientOriginalExtension(); // 'jpg'
$file->getMimeType(); // 'image/jpeg'
$file->guessExtension(); // 'jpg' (from MIME)
$file->getSize(); // 1024 (bytes)
$file->path(); // temporary path
$file->getContent(); // file contents
// Validation
$file->isValid(); // true if uploaded successfully
$file->isImage(); // true if image file
$file->getError(); // upload error code
$file->getErrorMessage(); // human-readable error
// Image dimensions (if image)
$dimensions = $file->dimensions();
// ['width' => 800, 'height' => 600]
// Moving files
$path = $file->move('/uploads/avatars');
$path = $file->move('/uploads/avatars', 'custom-name.jpg');
// Store with generated hash name
$path = $file->store('/uploads/documents');
// Store with specific name
$path = $file->storeAs('/uploads/documents', 'report.pdf');
// Generate hash name
$hashName = $file->hashName(); // 'a3f2c1b5...'
Headers & Cookies
Headers
// Get all headers
$headers = $request->headers();
// Get specific header
$contentType = $request->header('Content-Type');
$accept = $request->header('Accept', 'text/html');
// Check header exists
if ($request->hasHeader('Authorization')) { }
// Get bearer token from Authorization header
$token = $request->bearerToken();
// Get basic auth credentials
$user = $request->getUser();
$pass = $request->getPassword();
Cookies
// Get cookie
$theme = $request->cookie('theme');
$language = $request->cookie('language', 'en');
// Check cookie exists
if ($request->hasCookie('session_id')) { }
// Get all cookies
$cookies = $request->cookies();
HTTP Method
// Get HTTP method
$method = $request->method();
$method = $request->getMethod();
// Get real method (before spoofing)
$realMethod = $request->getRealMethod();
// Check method
if ($request->isMethod('POST')) { }
if ($request->isGet()) { }
if ($request->isPost()) { }
if ($request->isPut()) { }
if ($request->isPatch()) { }
if ($request->isDelete()) { }
if ($request->isOptions()) { }
if ($request->isHead()) { }
URL & Path
// Current URL
$url = $request->url(); // '/users?page=1'
$path = $request->path(); // '/users'
$decoded = $request->decodedPath(); // URL decoded path
// Full URL
$full = $request->fullUrl(); // 'https://example.com/users?page=1'
// Modify URL with query parameters
$url = $request->fullUrlWithQuery(['sort' => 'name']);
$url = $request->fullUrlWithoutQuery(['page']);
// URL parts
$root = $request->root(); // 'https://example.com'
$scheme = $request->getScheme(); // 'https'
$host = $request->getHost(); // 'example.com'
$port = $request->getPort(); // 443
// Check HTTPS
if ($request->isSecure()) { }
// Path segments
$segments = $request->segments(); // ['users', '123', 'edit']
$first = $request->segment(1); // 'users'
$second = $request->segment(2); // '123'
// Check path pattern
if ($request->is('admin/*')) {
// On admin page
}
if ($request->is('/users', '/users/*')) {
// On users page
}
// Check route name
if ($request->routeIs('users.*')) {
// On a users route
}
// Get previous URL (referer)
$previous = $request->previousUrl();
JSON Requests
// Check if JSON request
if ($request->isJson()) {
// Content-Type is JSON
}
// Get JSON payload
$data = $request->json();
$name = $request->json('user.name');
$email = $request->json('user.email', 'default@example.com');
// Check if expects JSON response
if ($request->expectsJson()) {
return Response::json($data);
}
if ($request->wantsJson()) {
return Response::json($data);
}
Content Negotiation
// Get acceptable content types
$types = $request->getAcceptableContentTypes();
// Check if accepts content type
if ($request->accepts('application/json')) {
return Response::json($data);
}
if ($request->accepts(['text/html', 'application/json'])) {
// Accepts either
}
// Check preferred format
if ($request->prefersJson()) {
return Response::json($data);
}
if ($request->prefersHtml()) {
return view('page');
}
// Get preferred format
$format = $request->format('html'); // 'html', 'json', 'xml', 'txt'
AJAX & Special Requests
// Check AJAX request
if ($request->isAjax()) { }
if ($request->ajax()) { }
// Check PJAX request
if ($request->isPjax()) { }
// Check prefetch request
if ($request->isPrefetch()) { }
Client Information
// Get client IP (handles proxies, Cloudflare, etc.)
$ip = $request->ip();
// Get all IPs in forward chain
$ips = $request->ips();
// Get user agent
$userAgent = $request->userAgent();
// Generate request fingerprint (unique hash)
$fingerprint = $request->fingerprint();
Route Parameters
// Get all route parameters
$params = $request->route();
// Get specific route parameter
$id = $request->route('id');
$slug = $request->route('slug', 'default');
Old Input (Flash)
Flash input to session for form repopulation:
// Flash all input
$request->flash();
// Flash only specific keys
$request->flashOnly(['email', 'name']);
// Flash all except specific keys (don't flash passwords!)
$request->flashExcept(['password', 'credit_card']);
// Get old input (in next request)
$email = $request->old('email');
$name = $request->old('name', 'Guest');
// Clear old input
$request->flushOld();
In Twig templates:
<input type="text" name="email" value="{{ old('email') }}">
CSRF Validation
// Validate CSRF token
if (!$request->validateCSRFToken()) {
abort(419, 'CSRF token mismatch');
}
Input Transformation
// Merge data into request
$request->merge(['processed' => true]);
// Merge only if missing
$request->mergeIfMissing(['status' => 'pending']);
// Replace all input
$request->replace($newData);
Debugging
// Dump request info
$info = $request->dump();
/*
Returns: [
'method' => 'POST',
'url' => 'https://example.com/users',
'path' => '/users',
'query' => [...],
'post' => [...],
'json' => [...],
'headers' => [...],
'cookies' => [...],
'files' => [...],
'ip' => '192.168.1.1',
'userAgent' => 'Mozilla/5.0...'
]
*/
// Convert to array
$array = $request->toArray();
Complete Example
app/Controllers/UserController.php
<?php
namespace App\Controllers;
use ZephyrPHP\Core\Controllers\Controller;
use ZephyrPHP\Core\Http\Response;
class UserController extends Controller
{
public function store()
{
// Validate CSRF
if (!$this->request->validateCSRFToken()) {
return Response::forbidden('Invalid CSRF token');
}
// Check required fields
if (!$this->request->filled(['name', 'email', 'password'])) {
$this->request->flash();
return $this->backWithErrors(['error' => 'All fields are required']);
}
// Get typed input
$name = $this->request->string('name');
$email = $this->request->sanitized('email', 'email');
$age = $this->request->integer('age', 0);
$subscribe = $this->request->boolean('newsletter');
// Handle file upload
if ($this->request->hasFile('avatar')) {
$file = $this->request->file('avatar');
if ($file->isValid() && $file->isImage()) {
$path = $file->store('/uploads/avatars');
}
}
// Create user...
// Return appropriate response
if ($this->request->expectsJson()) {
return Response::created(['user' => $user]);
}
$this->flash('success', 'User created!');
return $this->redirect('/users');
}
}
Method Reference
| Method | Description |
|---|---|
all() | Get all input data |
input($key, $default) | Get input value |
string($key) | Get input as string |
integer($key) | Get input as integer |
boolean($key) | Get input as boolean |
date($key) | Get input as DateTime |
has($key) | Check if key exists |
filled($key) | Check if key has value |
only($keys) | Get only specified keys |
except($keys) | Get all except keys |
file($key) | Get uploaded file |
header($key) | Get header value |
cookie($key) | Get cookie value |
method() | Get HTTP method |
path() | Get request path |
fullUrl() | Get full URL |
isAjax() | Check if AJAX |
expectsJson() | Check if wants JSON |
ip() | Get client IP |