Return to project page Live Demo

Parvalid

Version 0.1

Manual

Parvalid settings are stored in JSON format. They are mostly self-describing.

First of all take a look at live demo.

General inheritable constraints

namedefault valuedescription
error_code[404, "404 Not Found"]Array of status code and header, see list of HTTP status codes
error_page["/404.htm", true]Array of two values. First is error page include path. Second is boolean, if it is set to true then root will be treated as DOCUMENT_ROOT instead of drive root
is_optfalseIs parameter optional
type"string"Parameter`s type, see below

General not inheritable constraints

namedescription
order_nParameter must be placed at this fixed position

Types and corresponding options (everything is optional)

type / optionsdescription
i, int, integerChecks for parameter value to be castable to int
min, maxMinimum and maximum разрешенные integer values
f, floatChecks for parameter value to be castable to float
min, maxMinimum and maximum разрешенные float values
s, str, stringChecks for parameter value to be castable to string (not array)
reInheritable. Use null to disable. String must match this regexp
not_reInheritable. Use null to disable. String must not match this regexp
encodingInheritable. Default is mb_internal_encoding(). String is validated for this encoding (through mb_check_encoding())
min, maxMinimum and maximum length of string (counts through mb_strlen() with choosen encoding)
a, arr, arrayChecks for parameter value to be of type array
keyArray keys must match this sub-constraint
valueArray values must match this sub-constraint
min, maxMinimum and maximum length of array (counts through sizeof())
Inheritable means that if constraint is not found at paremeter level then search falls through to parent url-container. If it is not found there also then search falls through yet again, down to the root.

Current fallthrough order:
parameter → URL → root → [default]

Troubleshooting

On some shared hostings DOCUMENT_ROOT may contain incorrect path. In such case if you want to use path to error page that is relative to document root then you should replace it`s value before including parvalid:
$_SERVER['DOCUMENT_ROOT'] = '/full/path/from/root/directory/to/document/root';

Ограничения (Limitations)

  1. Проверка параметров производится сразу же при подключении через include или require, отложенный запуск через процедуру и передача каких-либо параметров в неё – недоступны.
  2. URL из файла настроек сравнивается с путём, взятым из REQUEST_URI. На данный момент нет возможности передать идентификатор (не обязательно соответствующий реальному URL) из своего скрипта и сравнивать с ним.
  3. Загрузка JSON-кода настроек только из файла parvalid.json, лежащего в той же директории, что и parvalid.php.
  4. Доступна только проверка массивов $_GET и $_POST, нет возможности проверки других суперглобальных массивов, таких как $_COOKIE или $_FILES.
  5. Имена параметров задаются только фиксированной строкой и не могут являться регулярными выражениями.
  6. Массивы могут иметь только по одному условию для всех ключей и для всех значений и не могут быть обработаны так же, как суперглобальные.
  7. Нет возможности задавать флаги регулярных выражений, например /i – игнорирование регистра.
  8. После того, как кодировка была однажды переопределена, нет возможности сбросить её на значение PHP по умолчанию.
  9. На данный момент нет таких заданных типов, как E-mail или Checkbox, в подобных ситуациях придётся использовать регулярные выражения.
  10. Также на данный момент нет возможности подключить валидатор переменных из своего PHP-кода.
  11. Нет таких параметров, как order_after и order_before, есть только order_n.
  12. Проверка параметров работает через суперглобальные массивы $_GET и $_POST, парсинг реальной строки запроса проводит движок PHP, он же обрабатывает случаи, когда параметр задан дважды (первое упоминание задаёт позицию элемента, последнее – значение).
  13. Нет возможности полностью запретить один из методов доступа (GET или POST). Если метод не указан, то считается, что разрешены любые параметры.
  14. Если URL не найден, то по умолчанию считаются допустимыми любые парамтетры, но по ходу выполнения вызывается ошибка уровня Notice.
  15. Не реализована поддержка относительных путей через вложенные URL-container`ы.
    То есть конструкция следующего вида работать не будет:
    {
      "urls": {
        "/search/": {
          "is_opt": "true",
          "get": {
            "view": {
              "type": "int",
              "min": 1,
              "max": 3
            }
          },
          "urls": {
            "cars/": {
              "post": {
                "term": {
                  "type": "string"
                }
              }
            },
            "bikes/": {
              "post": {
                "term": {
                  "type": "string"
    } } } } } } }
    При использовании подобного кода с текущей версией будет вызвана ошибка "Unsupported method".

    На данный момент допустима только конструкция с абсолютными путями:
    {
      "urls": {
        "/search/": {
          "is_opt": "true",
          "get": {
            "view": {
              "type": "int",
              "min": 1,
              "max": 3
            }
          }
        },
        "/search/cars/": {
          "is_opt": "true",
          "post": {
            "term": {
              "type": "string"
            }
          }
        },
        "/search/bikes/": {
          "is_opt": "true",
          "post": {
            "term": {
              "type": "string"
    } } } } }

Version history