From 2c93b37b208e6502fe98d89366fb8c391790d6cf Mon Sep 17 00:00:00 2001 From: Artur Welp Date: Wed, 19 Aug 2026 11:31:12 -0300 Subject: [PATCH] Adding README.md --- README.md | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..870e20e --- /dev/null +++ b/README.md @@ -0,0 +1,152 @@ +# 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.