Валидация параметров запроса

За работу с входящими параметрами отвечает компонент Input, получить объект которого можно посредством вызова метода приложения bff::input(), в контексте модулей и дополнений также доступен вариант $this->input->

Компонент работает со всеми основными методами запроса: GET, POST, COOKIE, SERVER, и предоставляет соответствующие методы доступа к данным:

    $this->input->get('name');
    $this->input->post('name');
    $this->input->cookie('name');
    $this->input->server('name');

Дополнительно есть возможность указать смешанный вариант:

    // получаем данные из GET запроса, если не нашли пробуем POST
    $this->input->getpost('name');
    // наоборот
    $this->input->postget('name');

Вторым параметром в данных методах указывается тип преобразования данных:

    // Значение будет приведено к беззнаковому целому числу
    $id = $this->input->get('id', TYPE_UINT);
    // boolean
    $active = $this->input->get('active', TYPE_BOOL);
    // string
    $string = $this->input->get('name', TYPE_STR);

Доступны следующие типы преобразования:

  • TYPE_NOCLEAN - без изменений
  • TYPE_BOOL - boolean (true/false)
  • TYPE_INT - integer (целое число)
  • TYPE_UINT - unsigned integer (беззнаковое целое число)
  • TYPE_NUM - number (число с плавающей точкой, float/double)
  • TYPE_UNUM - unsigned number (беззнаковое число с плавающей точкой)
  • TYPE_UNIXTIME - unix datestamp (unsigned integer) (дата в Unix формате)
  • TYPE_STR - trimmed string (строка без пробелов в начале и конце)
  • TYPE_NOTRIM - string - no trim (строка с допустимыми пробелами в начале и конце)
  • TYPE_NOHTML - trimmed string (строка обработанная htmlspecialchars)
  • TYPE_ARRAY - array (массив)
  • TYPE_BINARY - binary string (бинарная строка, например содержимое бинарного файла)
  • TYPE_NOHTMLCOND - trimmed string with HTML made safe if determined to be unsafe
  • TYPE_NOTAGS - trimmed string, stripped tags (строка обработанная strip_tags)
  • TYPE_DATE - date (текстовое представление даты)
  • TYPE_PRICE - price (цена с приведением к виду 0.5)
  • TYPE_TEXT - plain text (безопасная строка обработанная strip_tags с поддержкой активных ссылок)
  • TYPE_JSON - json (массив на основе JSON строки)
  • TYPE_PASS - password (парольная фраза с допустимыми пробелами в начале и конце)

Также возможно приведение данных к массиву определенного типа, для этого используйте:

  • TYPE_ARRAY_BOOL
  • TYPE_ARRAY_INT
  • TYPE_ARRAY_UINT
  • TYPE_ARRAY_NUM
  • TYPE_ARRAY_UNUM
  • TYPE_ARRAY_UNIXTIME
  • TYPE_ARRAY_STR
  • TYPE_ARRAY_NOTRIM
  • TYPE_ARRAY_NOHTML
  • TYPE_ARRAY_ARRAY
  • TYPE_ARRAY_BINARY
  • TYPE_ARRAY_NOHTMLCOND
  • TYPE_ARRAY_NOTAGS
  • TYPE_ARRAY_DATE
  • TYPE_ARRAY_PRICE
  • TYPE_ARRAY_TEXT

Также есть удобные методы проверки на соответствие заданному формату:

    $email = $this->input->get('email');
    if ( ! $this->input->isEmail($email)) {
        $this->errors->set(_t('users', 'Email адрес был указан некорректно'));
    }

Проверка номер телефона:

    $phone = $this->input->get('phone');
    if ( ! $this->input->isPhoneNumber($phone)) {
        $this->errors->set(_t('users', 'Номер телефона был указан некорректно'));
    }