# Infor-Request-Response
PHP library for HTTP request/response abstraction. Provides clean, static-style APIs for reading request parameters, building responses, and managing session flash messages.
**Package:** `inforsistemas/rr`
**Namespace:** `RR`
**Requires:** PHP 8.1+
---
## Installation
```bash
composer require inforsistemas/rr
```
---
## Classes
### `Request` — Reading input parameters
Fully static class. POST always takes precedence over GET.
```php
use RR\Request;
use RR\ParamType;
// Required param — throws Exception if missing
$id = Request::requiredParam('id', ParamType::INT);
// Optional param — returns default if missing
$search = Request::optionalParam('q', ParamType::ALPHA, '');
// Required array param — throws Exception if missing
$items = Request::requiredParamArray('items');
// Detect AJAX/fetch/API client requests
if (Request::detectAjaxRequest()) {
// respond with JSON
}
```
**`ParamType` enum values:** `INT`, `DOUBLE`, `ALPHA`, `ALPHANUM`
---
### `Response` — Building and sending responses
Singleton accessed via `Response::getInstance()`. All builder methods are chainable and static.
```php
use RR\Response;
// Send a plain HTML response
Response::body('
Hello
')->send();
// Append/prepend to the body buffer
Response::bodyPrepend('');
Response::bodyAppend('');
Response::send();
// Set a custom header
Response::header('X-Custom', 'value')->send();
// Send a JSON response
Response::json(['status' => 'ok', 'data' => $result])->send();
// JSONP response
Response::json($data, 'myCallback')->send();
// Redirect (303 by default)
// Automatically returns JSON {"location": "..."} for AJAX requests
Response::redirect('/dashboard');
Response::redirect('/login', 302);
// Redirect back to the previous page (HTTP_REFERER)
Response::back();
// Terminate execution after sending
Response::send()->done();
```
---
### `Flash` — Session-based flash messages
Singleton accessed via `Flash::getInstance()`. Messages are written to the session and available on the **next** request.
```php
use RR\Flash;
use RR\MessageType;
// Add messages (shorthand methods)
Flash::addInfo('Profile updated.');
Flash::addSuccess('Order placed successfully!');
Flash::addWarning('Your session will expire soon.');
Flash::addError('Invalid credentials.');
// Add a message with an explicit type
Flash::addMessage('Something happened.', MessageType::INFO);
// Read messages on the next request
if (Flash::hasMessageType(MessageType::ERROR)) {
$errors = Flash::getError();
}
$infos = Flash::getInfos();
$successes = Flash::getSuccess();
$warnings = Flash::getWarning();
$errors = Flash::getError();
// Get all messages of any type
$messages = Flash::getMessages(MessageType::SUCCESS);
```
**`MessageType` enum values:** `INFO`, `SUCCESS`, `WARNING`, `ERROR`
---
## Typical usage pattern
```php
use RR\Request;
use RR\Response;
use RR\Flash;
use RR\ParamType;
// Controller action
function store(): void
{
try {
$name = Request::requiredParam('name', ParamType::ALPHA);
$price = Request::requiredParam('price', ParamType::DOUBLE);
// ... save to DB ...
Flash::addSuccess('Item created successfully.');
Response::redirect('/items');
} catch (\Exception $e) {
Flash::addError('Missing required fields.');
Response::back();
}
}
```
---
## License
See [composer.json](composer.json) for author information.