В рамках цикла «изобретение велосипедов» представляю релиз-кандидат библиотечки go\Request
.
- Репа на гитхабе
- Релизы
- Документация на русском
- Системные требования: PHP 5.3
Библиотека осуществляет доступ к параметрам с которыми вызван наш сценарий: GET/POST-данные, куки, переменные окружения, заголовки запроса, настройки сервера и клиента, аргументы и опции командной строки и тому подобное.
GET, POST и всё такое
Упрощение основной рутины при ручном разборе входящих переменных.
Проверка целостности переданных данных и их соответствие форматам.
$id = $request->get->get('id', 'uint'); // Считать $_GET['id'] if (!$id) { // id не передано или там не целое положительное число die('404'); } if (isset($request->post->delete)) { // DELETE $id } |
Числа, чекбоксы, идентификаторы, массивы, автомассивы, древовидные структуры, селекты из ограниченного набора значений и многое другое.
Проверка на доверие к запросу.
Простейший разбор формы
/* В $_POST['f'] должна прийти форма с нужным определённым строковых полей */ $form = $request->post->loadForm('f', array('name', 'email', 'age', 'sex')); if (!$form) { // форма не передана die('404'); } echo 'Имя юзера: '.$form->name; |
Чуть менее простой разбор формы
$settings = array( 'format' => array( 'name' => array( // Имя 'trim' => true, // обрезать пробелы 'maxlength' => 20, // максимальная длина 'notempty' => true, // не должно быть пустым ), 'email' => array( // Мыло 'trim' => true, // Обрезать пробелы 'match' => '/^@+@.+/s', // Должно соответствовать регулярке ), 'age' => array( // Возраст 'type' => 'uint', // Целое положительное число 'range' => array(18, null), // От 18 и старше ), 'sex' => array( // Пол 'enum' => array('male', 'female'), // SELECT с двумя значениями ), ), ); $form = $request->post->loadForm('f', $settings); |
Фильтрация, валидация, приведение типов полей. Рекурсивный разбор сложных форм. Различные форматы результата.
Табличные формы
Таблица со списком одинаковых элементов, которые можно редактировать?
#id Имя Мыло Удалить? 1 Вася vasa@vasa.loc [-] 3 Петя peta@peta.loc [x] 7 Миша misha@misha.loc [-] [Сохранить изменения]
Тоже разбирается с легкостью.
Параметры HTTP-запроса
HTTP-заголовки, информация о клиенте, настройки сервера, параметры соединения и многое другое.
echo 'Браузер пользователя: '.$request->http->client->userAgent; echo 'ПО сервера: '.$request->http->server->soft; echo 'Статус подключения: '.$request->connection->status; echo 'Используется ли HTTPS? '.($request->connection->https ? 'Да' : 'Нет'); echo 'Абсолютный URI документа: '.$request->document->absolute; echo 'Разобрать путь на сайте на компоненты: '; print_r($request->document->components); |
HTTP-авторизация. Basic и Digest.
Например, устроим себе Basic-авторизацию для списка пользователей:
use go\Request\Request; /* Список пользователей. login => password */ $users = array( 'vasya' => 'pupkin', 'petya' => 'lojkin', 'misha' => 'krushkin', ); $auth = Request::getInstanceForSystem()->http->auth; if (!$auth->checkBasicForList($users)) { /* Не авторизован - запрос на ввод логина/пароля */ header($auth->getAuthHTTPStatus(true)); header($auth->getBasicHeader('Password, please')); exit(); } /* Успешная авторизация */ echo 'Здорово, '.$auth->user.'!'; |
Разбор командной строки
Разные примочки для скриптов, вызванных из консоли.
Разбор командной строки на компоненты (с учётом всех кавычек, слешей и тому подобного).
use go\Request\CLI\Argv; $cmd = './script.php --opt="this is value" arg1 arg2'; $argv = Argv::createFromString($cmd); print_r($argv->getArgsArray()); // ["./script.php", "--opt=this is value", "arg1", "arg2"] |
Извлечение аргументов и опций разным макаром.
Разбор опций в соответствии с заданным форматом и фильтрами.
Стек вызова подзадач с передачей оставшихся аргументов.
Базовый класс для организации задач, вызываемых из командной строки.
Агрегатор всего этого
Каждый из компонентов библиотеки можно использовать отдельно и заполнять своими данными.
Либо можно использовать один объект-агрегатор, содержащий данные текущего запроса.
use go\Request\Request; $request = Request::getInstanceForSystem(); $request->post; // Хранилище POST-данных $request->cookie; // Хранилище кук $request->http->headers; // HTTP-заголовки $request->http->client; // Данные клиента $request->http->auth; // HTTP-авторизация $request->args->getCommandLine(); // Командная строка. $request->args->getStack(); // Стек командной строки // more... |
Модные штучки
Для гурманов, радующий слух набор слов: PSR-0, PSR-1, Composer, Phar, phpdoc, phpunit.
Лицензия
Делайте с этим что хотите, только потом не жалуйтесь.