Функция cot_import_list в Cotonti

Разбор функции cot_import_list
Функция cot_import_list используется для импорта данных из различных источников, причем она позволяет обрабатывать несколько переменных одновременно, применяя фильтры для каждой переменной. Она работает с массивом имен переменных и их соответствующими фильтрами, а также с несколькими источниками данных.

Код функции

/**
 * Imports data from the outer world by list of Variable names
 * Relies on cot_import function
 *
 * @param array|string $nameslist List of Variables names to import, can be:<br />
 *                 string 'name1, name2 , ...' - list of variable names comma separated.<br />
 *                 array('name1', 'name2', ...) - list of variable names only.
 *                 In that case $filter parameter must be specified.<br />
 *                 array('name1' => 'TYPE1', 'name2' => 'TYPE2' ,...) - list of variable names with their filter types
 * @param string $source Source type: G/GET, P/POST, C/COOKIE, R/REQUEST, PUT, DELETE or D/DIRECT (variable filtering)
 * @param array $origindata Array with origin data that will be extended with imported one
 * @param string $nameprefix Unified prefix for Variables names
 * @param string $filter Filter type, can be set as:<br />
 *                 string 'FLT' - single filter string for all Variables<br />
 *                 string 'FLT1, FLT2, ...' - comma separated string with filters corresponding to Variable names<br />
 *                 array('FLT1', 'FLT2', ...) - array of filters<br />
 *             Overrides Filter types specified in $nameslist. If passed as list - number of Filters must be equal to count of
 *             variables names in $nameslist.
 *
 * @param bool $arrayprefix Use $nameprefix for array fields
 * @param int $maxlen Length limit
 * @param bool $dieonerror Die with fatal error on wrong input
 * @param bool $buffer Try to load from input buffer (previously submitted) if current value is empty
 * @return ?array Returns combined array of data or NULL if wrong parameters set
 */
function cot_import_list(
    $nameslist = [],
    $source = 'P',
    $origindata = [],
    $nameprefix = '',
    $filter = null,
    $arrayprefix = false,
    $maxlen = 0,
    $dieonerror = false,
    $buffer = false
) {
    $direct = ($source == 'D' || $source == 'DIRECT');
    $filter = empty($filter) ? null : $filter;
    $nameslist = empty($nameslist) ? [] : $nameslist;
    $origindata = (empty($origindata) || !is_array($origindata)) ? [] : $origindata;

    if (empty($nameslist)) {
        $nameslist = [];
    } elseif (!is_array($nameslist)) {
        $nameslist = array_map('trim', explode(',', $nameslist));
    }

    if (!empty($filter) && !is_array($filter)) {
        if (strpos($filter, ',') !== false) {
            $filter = array_map('trim', explode(',', $filter));
        } else {
            $filter = array_fill(
                0,
                sizeof($direct && empty($nameslist) ? $origindata : $nameslist),
                $filter
            );
        }
    }

    if (!$direct && sizeof($nameslist) == 0) {
        // no proper name list
        return null;
    } elseif (sizeof($nameslist) == 0) {
        // direct by origin
        if (is_null($filter)) {
            return null;
        }
        foreach ($origindata as $key => $value) {
            $origindata[$key] = cot_import($value, 'D', array_shift($filter), $maxlen, $dieonerror);
        }
    } else {
        // namelist exists
        $index = array_keys($nameslist);
        $index = array_pop($index);
        $types_not_defined = (is_numeric($index) && is_int($index));

        if (
            (is_array($filter) && sizeof($filter) != sizeof($nameslist))
            || ($types_not_defined && is_null($filter))
        ) {
            // can't rely on filter or no filter exists
            return null;
        } elseif (is_array($filter)) {
            $nameslist = array_combine($types_not_defined ? $nameslist : array_keys($nameslist), $filter);
        }

        foreach ($nameslist as $name => $filtertype) {
            $origindata[($arrayprefix) ? $nameprefix . $name : $name] = cot_import(
                $direct ? $origindata[$nameprefix . $name] : $nameprefix . $name,
                $source,
                $filtertype,
                $maxlen,
                $dieonerror,
                $buffer
            );
        }
    }

    return $origindata;
}


Описание:

cot_import_list($nameslist, $source, $origindata, $nameprefix, $filter, $arrayprefix, $maxlen, $dieonerror, $buffer)


 

Параметры:
$nameslist: Список переменных для импорта:

Строка, содержащая через запятую имена переменных.
Массив, в котором значения — имена переменных.
Ассоциативный массив, где ключи — имена переменных, а значения — типы фильтров.
$source: Источник данных, из которого будет происходить импорт (например, 'GET', 'POST', 'COOKIE' и т.д.). По умолчанию используется 'POST'.

$origindata: Массив с исходными данными, в который будут добавляться данные после импорта.

$nameprefix: Префикс, который будет добавлен к именам переменных.

$filter: Тип фильтра, который будет применяться к переменным. Это может быть строка с одним фильтром для всех переменных или массив фильтров для каждой переменной по очереди.

$arrayprefix: Если установлено в true, будет добавлен префикс к массивам.

$maxlen: Ограничение длины для данных.

$dieonerror: Если установлено в true, при ошибке произойдет фатальная ошибка.

$buffer: Если установлено в true, функция будет использовать буферизацию данных.

Логика работы:

Инициализация переменных:

Проверяется параметр $source, чтобы определить, будет ли это прямой доступ к данным или будет использоваться одна из стандартных источников данных (например, $_GET, $_POST).
Проверяется, что список переменных в $nameslist не пуст.

Обработка фильтров:

Если фильтры переданы как строка, она делится на массив с помощью explode().
Если фильтры не переданы, то для каждого имени в списке переменных фильтр по умолчанию применяется ко всем переменным.

Прямой доступ к данным:

Если используется прямой доступ (например, D или DIRECT), то функция обрабатывает данные из массива $origindata напрямую, без использования глобальных массивов.

Обработка с использованием имен переменных:

Если передан список переменных с фильтрами, то для каждой переменной из списка вызывается функция cot_import с соответствующими параметрами. Результаты записываются в массив $origindata.

Возвращение результата:

Функция возвращает массив с результатами импорта, где данные объединены с исходными данными (массив $origindata).

Пример использования:

// Пример использования с массивом переменных и фильтров
$names = ['username' => 'TXT', 'age' => 'INT', 'email' => 'TXT'];
$data = cot_import_list($names, 'POST', [], 'user_', 'TXT');


// Пример использования с прямым импортом из GET с общим фильтром
$names = 'name, age, email';
$data = cot_import_list($names, 'GET', [], '', 'TXT');

 

Примечания:

Обработка с буфером:
Если в параметре $buffer установлено значение true, то функция будет пытаться загрузить данные из буфера (если они были отправлены ранее).

Поддержка нескольких фильтров:
Функция поддерживает фильтрацию каждого параметра по-разному. Если фильтр не указан для переменной, она будет обработана по умолчанию (например, как строка).

Прямой доступ:
Если необходимо использовать данные из массива, который уже существует (например, переданные данные в $origindata), можно использовать прямой доступ без обращения к глобальным массивам, передав 'D' в параметр $source.

Важные моменты:
Функция cot_import_list является более гибким инструментом для массового импорта и обработки данных, поскольку позволяет работать с несколькими переменными и фильтрами одновременно.

Она также поддерживает различные источники данных, что делает её универсальной в различных сценариях (например, работы с формами или запросами).

5 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Article multicategories

Additional categories where this article is shown as similar.

Content author

Administrator

Offline

Administrator

Last logged: 2026-09-13 14:50

  • Page published: 2025-01-21 11:40
  • Last update: 2025-01-21 11:40