cloud-castle / http-request
Библиотека обработки HTTP запросов
1.0.0.9
2025-07-01 09:53 UTC
Requires (Dev)
- phpunit/phpunit: ^10.5
README
English | Deutsch | Français
CloudCastle HttpRequest — современная PHP-библиотека для удобной, безопасной и расширяемой работы с HTTP-запросами, сессиями, cookie, файлами, заголовками, серверными переменными и окружением. Поддерживает автоматический разбор JSON и XML, паттерн Singleton, магические методы, глобальные вспомогательные функции и полностью покрыта тестами.
🧪 Статистика тестов и покрытия
- PHPUnit: 163 теста, 194 утверждения, 2 пропущено
- Покрытие строк: 90.43% (624 / 690)
- Покрытие методов: 73.33% (44 / 60)
- Покрытие классов: 61.54% (8 / 13)
- Последний запуск: 2025-06-29
- Среднее время выполнения тестов: ~0.5 сек
Покрытие по директориям
Директория | Строки | Методы | Классы |
---|---|---|---|
Http | 82.79% (101/122) | 83.87% (26/31) | 57.14% (4/7) |
Server | 70.83% (17/24) | 75.00% (3/4) | 50.00% (1/2) |
Traits | 100.00% (17/17) | 100.00% (6/6) | 100.00% (3/3) |
helpers | 0.00% (0/34) | 0.00% (0/8) | — |
🧪 Подробная статистика покрытия по классам
Класс | Строки | Методы | Публичные методы | Покрытие методов |
---|---|---|---|---|
Cookie | 100% (20/20) | 100% (7/7) | 7/7 | 100% |
Get | 100% (4/4) | 100% (1/1) | 1/1 | 100% |
Post | 100% (4/4) | 100% (1/1) | 1/1 | 100% |
Files | 100% (15/15) | 100% (1/1) | 1/1 | 100% |
Headers | 91% (21/23) | 67% (2/3) | 2/3 | 67% |
Session | 78% (25/32) | 67% (6/9) | 6/9 | 67% |
UploadFile | 50% (12/24) | 89% (8/9) | 8/9 | 89% |
Server | 100% (4/4) | 100% (1/1) | 1/1 | 100% |
Env | 65% (13/20) | 67% (2/3) | 2/3 | 67% |
Непокрытые публичные методы (по dashboard.html):
- UploadFile::save — 14% покрытия
- Session::__set, __get — 0% покрытия
- Headers::__construct — 87% покрытия (частично)
- Env::__set — 53% покрытия
- (и др., см. dashboard.html)
📎 Быстрые ссылки
⚙️ Требования
- PHP >= 8.3
- Расширения: ext-json, ext-mbstring
- Совместимость: любой фреймворк, поддержка PSR-4
🚀 CI/CD Workflow (GitHub Actions)
name: CI on: push: branches: [ main, master ] pull_request: branches: [ main, master ] jobs: build: runs-on: ubuntu-latest strategy: matrix: php-version: [ '8.3', '8.4' ] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }} extensions: mbstring, xml, simplexml, curl, json, session coverage: xdebug - name: Install dependencies run: composer install --no-interaction - name: Run tests run: composer test - name: Run static analysis run: composer phpstan - name: Coverage (text) run: composer coverage - name: Coverage (HTML) run: composer coverage-html - name: Generate documentation run: composer docs-gen - name: Upload coverage report uses: actions/upload-artifact@v4 with: name: coverage-report path: coverage-report/ - name: Upload documentation uses: actions/upload-artifact@v4 with: name: documentation path: build/api/
🗺️ Архитектура (Mermaid)
graph TD; Request -->|has| Cookie Request -->|has| Session Request -->|has| Headers Request -->|has| Get Request -->|has| Post Request -->|has| Files Request -->|has| Server Request -->|has| Env Cookie -->|uses| GetInstanceTrait Session -->|uses| SetExpireTrait Headers -->|uses| GetDataTrait Headers -->|uses| GetInstanceTrait Env -->|uses| GetDataTrait Env -->|uses| GetInstanceTraitLoading
📋 Содержание
- Возможности
- Установка
- Быстрый старт
- Архитектура и компоненты
- Подробное API
- Примеры использования
- Вспомогательные функции
- Интеграция с фреймворками
- Тестирование
- FAQ
- Лицензия и контакты
🚀 Возможности
- Универсальный доступ к данным запроса: GET, POST, COOKIE, SESSION, FILES, HEADERS, SERVER, ENV
- Автоматический разбор JSON и XML тела запроса
- Удобная работа с cookie и сессиями (Singleton, цепочки вызовов, сериализация)
- Безопасная работа с загруженными файлами
- Глобальные функции для быстрого доступа к данным
- Гибкая настройка времени жизни сессий и cookie
- Совместимость с современными стандартами PHP (8.1+)
- Полное покрытие тестами (PHPUnit)
- Расширяемость и интеграция с любыми фреймворками
📦 Установка
Через Composer (рекомендуется)
composer require cloud-castle/http-request
Ручная установка
git clone https://github.com/zorinalexey/cloud-castle-http-request
cd http-request
composer install
⚡ Быстрый старт
<?php require_once 'vendor/autoload.php'; use CloudCastle\HttpRequest\Request; // Получить singleton Request $request = Request::getInstance(); // Получить параметры запроса $userId = $request->get('user_id'); $session = $request->session; $all = $request->all(); // Получить POST/GET/COOKIE/FILES/HEADERS $post = $request->post; $get = $request->get; $cookie = $request->cookie; $files = $request->files; $headers = $request->headers;
🏗️ Архитектура и компоненты
- Request — основной фасад для доступа ко всем данным запроса.
- Get/Post — доступ к GET/POST данным.
- Cookie — управление cookie (установка, получение, удаление, очистка).
- Session — управление сессиями.
- Files/UploadFile — работа с загруженными файлами.
- Headers — работа с HTTP-заголовками.
- Server/Env — доступ к серверным переменным и окружению.
- Вспомогательные функции:
request()
,cookies()
,session()
,files()
,headers()
,get()
,post()
,env()
.
📚 Подробное API
Request
Метод | Описание |
---|---|
getInstance() | Получить singleton Request |
init($sess, $cook) | Инициализация с TTL для сессии и cookie |
get($key, $def) | Получить параметр по ключу |
all() | Получить все данные запроса |
__get($name) | Магический доступ к компонентам |
Cookie
Метод | Описание |
---|---|
set($key, $val) | Установить cookie |
get($key, $def) | Получить cookie |
delete($key) | Удалить cookie |
clear() | Очистить все cookie |
Session
Метод | Описание |
---|---|
set($key, $val) | Установить значение в сессию |
get($key, $def) | Получить значение из сессии |
delete($key) | Удалить значение из сессии |
clear() | Очистить сессию |
Files/UploadFile
Метод | Описание |
---|---|
get($name) | Получить файл по имени |
all() | Получить все файлы |
isUploaded() | Проверить, был ли файл загружен |
save($path) | Сохранить файл |
getOriginalName() | Оригинальное имя файла |
getSize() | Размер файла |
getMimeType() | MIME-тип файла |
getExtension() | Расширение файла |
Headers
Метод | Описание |
---|---|
get($name, $def) | Получить заголовок |
all() | Получить все заголовки |
__set($name, $val) | Установить заголовок |
Server/Env
Метод | Описание |
---|---|
get($name, $def) | Получить переменную сервера/окружения |
all() | Получить все переменные |
💡 Примеры использования
Глобальная функция request()
// Получить параметр из любого источника (GET, POST, ...), либо объект Request $id = request('id'); $name = request('name', 'default_name'); $request = request(); // Получить все данные запроса $all = request()->all(); // Работа с файлами $avatar = request()->files('avatar'); if ($avatar && $avatar->isUploaded()) { $avatar->save('/uploads/avatars/'); } // Работа с cookie request()->cookie->set('token', 'abc123'); $token = request()->cookie->get('token'); // Работа с сессией request()->session->set('user_id', 42); $userId = request()->session->get('user_id');
Работа с заголовками
$headers = request()->headers; $userAgent = $headers->get('User-Agent'); $headers->X_Custom_Header = 'custom_value';
Работа с JSON и XML
// Если Content-Type: application/json $data = request()->all(); // автоматически преобразуется в массив // Если Content-Type: application/xml $data = request()->all(); // автоматически преобразуется в массив
Работа с GET/POST
$get = request()->get; $post = request()->post; $name = $get->get('name'); $email = $post->get('email');
Работа с серверными переменными и окружением
$server = request()->server; $env = request()->env; $host = $server->get('HTTP_HOST'); $phpVersion = $env->get('PHP_VERSION');
Работа с UploadFile
$file = request()->files('avatar'); if ($file && $file->isUploaded()) { $file->save('/uploads/avatars/'); echo $file->getOriginalName(); echo $file->getSize(); echo $file->getMimeType(); }
🛠️ Вспомогательные функции
request($key = null, $default = null)
— универсальный доступ к данным запросаcookies($key = null, $default = null)
— доступ к cookiesession($key = null, $default = null)
— доступ к сессииfiles($key = null)
— доступ к загруженным файламheaders($key = null, $default = null)
— доступ к заголовкамget($key = null, $default = null)
— доступ к GETpost($key = null, $default = null)
— доступ к POSTenv($key = null, $default = null)
— доступ к переменным окружения
🌐 Интеграция с фреймворками
Laravel
use CloudCastle\HttpRequest\Request; $request = Request::getInstance(); $userId = $request->get('user_id');
Symfony
use CloudCastle\HttpRequest\Request; $request = Request::getInstance(); $headers = $request->headers;
Slim
use CloudCastle\HttpRequest\Request; $app->post('/api', function ($req, $res, $args) { $request = Request::getInstance(); $data = $request->all(); // ... });
🧪 Тестирование
composer install vendor/bin/phpunit --testdox
❓ FAQ и Troubleshooting
- Q: Почему не видны новые переменные окружения?
A: Используйте$env->get('VAR')
после установки, убедитесь, что переменная есть в $_ENV. - Q: Как добавить поддержку нового Content-Type?
A: Добавьте его в массивRequest::$contentTypes
. - Q: Как протестировать загрузку файлов?
A: Используйте мок-объекты и подмену $_FILES в тестах. - Q: Как сбросить singleton?
A: Используйте методresetInstance()
для нужного класса.
🚦 Performance & Security
- Используйте HTTPS для работы с cookie и сессиями.
- Не храните чувствительные данные в cookie.
- Для production отключайте подробные ошибки.
- Используйте статический анализ и покрытие тестами для повышения качества.
🤝 Contributing
- Форкните репозиторий, создайте ветку, отправьте PR.
- Соблюдайте PSR-12, пишите тесты для новых фич.
- Все изменения должны проходить CI/CD.
- Для багов — создавайте issue с подробным описанием.
📝 Changelog
Смотрите CHANGELOG.md для истории изменений.
📬 Контакты и поддержка
- Email: zorinalexey59292@gmail.com
- Telegram: @CloudCastle85
- Issues: https://github.com/zorinalexey/Http-Request/issues
📄 Лицензия
MIT License. См. файл LICENSE.
📝 Лицензия и контакты
MIT © Алексей Зорин (zorinalexey59292@gmail.com)
CloudCastle HttpRequest — ваш универсальный инструмент для работы с HTTP в PHP!