Using ShoeRequest¶
LacePHP provides a single, sanitized HTTP request object called ShoeRequest. It wraps PHP superglobals, strips out unsafe data, and gives you easy methods to read GET, POST, JSON and file inputs—all in one place.
Helper Function¶
To access the request anywhere in your app, use the sole_request() helper:
use function sole_request;
$req = sole_request();
// same as \Lacebox\Sole\Http\ShoeRequest::grab()
Tip: We keep one immutable instance of ShoeRequest to ensure that every part of your code sees the same cleaned-up inputs and that session/CSRF state is initialized just once.
Reading Input Values¶
Use input() to fetch a parameter from JSON body, POST or GET (in that order):
// URL: /search?q=lacephp
// JSON body: { "q": "php" }
$term = sole_request()->input('q', 'default');
// → returns "php" if JSON present, otherwise GET “lacephp”, or “default”
To get all sanitized inputs at once:
$all = sole_request()->all();
// e.g. ['q'=>'lacephp', 'page'=>2, ...]
And to restrict to only certain keys:
$data = sole_request()->only(['email', 'name']);
Or to drop sensitive keys before logging:
$safe = sole_request()->except(['password', 'credit_card']);
Headers, Server Data & Files¶
Read HTTP headers with header() and raw server values with server():
$userAgent = sole_request()->header('User-Agent');
$uri = sole_request()->server('REQUEST_URI');
Uploaded files are available via:
$files = sole_request()->files();
// each entry sanitized to include name, type, tmp_name, error, size
Cross-Site Request Forgery (CSRF)¶
ShoeRequest automatically generates a secure token stored in $_SESSION[‘_csrf_token’].
To add the hidden field in an HTML form:
<form method="POST" action="/submit"> <?= sole_request()->csrfField() ?> <input name="email" /> <button>Send</button> </form>
To validate the token in your controller or route:
sole_request()->validateCsrf(); // throws RuntimeException on mismatch
Warning
Always call validateCsrf() before processing any POST, PUT, PATCH or DELETE action. This ensures attackers cannot forge requests on behalf of your users.
Why Sanitization Matters¶
strip_tags removes any HTML or script tags to prevent XSS.
trim and null-byte stripping avoid hidden characters and malformed inputs.
Key sanitization restricts keys to letters, numbers and underscores, preventing header injection.
Putting It All Together¶
Example in a controller:
class UserController
{
public function store()
{
$req = sole_request();
$req->validateCsrf();
// Only allow these fields
$data = $req->only(['name', 'email', 'password']);
// Now safe to pass $data to your model or validator
User::create($data);
return 'User created!';
}
}
That’s it! With ShoeRequest you get a clean, consistent interface to every part of the HTTP request—making your code safer, clearer and easier to test.