BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • IO7 Framework vs Laravel 13 — Сравнение
    • Структура
    • Варианты проектов
    • Доступ к участкам проекта
    • Разворачивание нового проекта
    • Установка проекта
    • Запуск локальной разработки
  • API

    • Обзор API
    • IOCore::call() и IOCore::callAction()
    • Создание API
  • CLI

    • Обзор CLI
    • iocli
    • Кастомные CLI команды
  • Работа с базами данных

    • Обзор работы с базами данных
    • Cron / Планировщик задач (Schedule)
    • Фабрики
    • Миграции
    • Сидеры
    • Query Builder
    • Подключение MinIO
    • Подключение MongoDB
    • Подключение MySQL
    • Подключение PostgreSQL
    • Подключение ProxySQL
    • Подключение RabbitMQ
    • Подключение Redis
  • Логирование

    • Обзор логирования
    • IOEvent - Логирование событий
    • Pinba (PinbaManager) - Профилировщик
  • Модели

    • Обзор моделей
    • CRUD операции
    • Связи моделей
  • Очереди

    • Обзор очередей
    • RabbitMQ
  • Маршруты

    • Обзор маршрутов
    • Определение маршрутов
    • Middleware
  • Сессии

    • Обзор сессий
    • Кроссдоменная SSO
    • JWT авторизация
    • Социальная авторизация
    • OAuth2
    • Keycloak
  • Twig

    • Обзор Twig
    • Формы (FormBuilder)
    • Twig функции
  • Тестирование

    • Обзор тестирования
    • Unit тесты
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Вспомогательные функции (Helpers)
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
    • Миграции
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

IO\Core::call() и IO\Core::callAction()

Внимание

Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!

  • IO\Core::call()
    • Формат entity
    • Примеры
  • IO\Core::callAction()
    • Формат entity
    • Примеры
  • IO\Core::callActionQuiet()
  • Вспомогательные методы
    • entityToFile()
    • Instance()
    • checkRules()
    • signData()
    • sendData()
  • Межсерверное взаимодействие
    • Локальные вызовы
    • Удалённые вызовы
    • Защита
  • См. также

IO\Core — центральный класс для межсерверных и локальных вызовов методов. Два основных метода: call() для вызова классов и callAction() для вызова API.

Требования: PHP ^8.2, Illuminate (Laravel 13), PHPUnit 11


IO\Core::call()

Вызов статического метода класса. Работает локально или через HTTP (cURL) на удалённый сервер.

public static function call(
    string $entity,
    array $params,
    int $fromio = 0,
    bool $log_echo = false
): mixed

Параметры:

ПараметрТипЗначение по умолчаниюОбязателенОписание
$entitystring—ДаТочечный путь к методу (напр. app.class.user.getById)
$paramsarray[]НетПараметры метода
$fromioint0Нет1 — вызов из IO (блокирует проксирование)
$log_echoboolfalseНетВключить отладочный вывод

Возвращает: Результат метода или массив ['error_code' => int, 'error_str' => string].

Формат entity

<проект>.<тип>.<класс>.<метод>
ЧастьОписаниеПримеры
ПроектИмя проектаapp, io, com.sso
ТипclassВсегда class для call()
КлассИмя классаuser, product, unit
МетодСтатический методgetById, search, login

Примеры

// Локальный вызов метода класса
$result = \IO\Core::call('app.class.user.getById', ['id' => 42]);
// Эквивалентно: \App\Classes\User::getById(['id' => 42])

// Вызов метода в IO (framework)
$result = \IO\Core::call('io.class.unit.search', [
    'filter' => ['is_active' => 1],
]);

// Межсерверный вызов
// Если 'com.sso' — отдельный сервер, запрос отправится через cURL
$result = \IO\Core::call('com.sso.class.user.login', [
    'login'    => 'admin',
    'password' => 'secret',
]);

// С отладочным выводом
$result = \IO\Core::call('app.class.product.search', [
    'filter' => ['category' => 5],
], 0, true);

IO\Core::callAction()

Вызов action-метода API. Поддерживает IO\Api\CoreApi и IO\Api\CrudApi.

public static function callAction(
    string $entity,
    $params,
    int $fromentity = 0,
    int $filesupload = 0,
    bool $log_echo = false
): mixed

Параметры:

ПараметрТипЗначение по умолчаниюОбязателенОписание
$entitystring—ДаТочечный путь к API (напр. app.model.user.search)
$paramsarray|mixed[]НетПараметры action
$fromentityint0Нет1 — вызов из другой сущности (блокирует проксирование)
$filesuploadint0Нет1 — загрузка файлов из $_FILES
$log_echoboolfalseНетВключить отладочный вывод

Формат entity

<проект>.<тип>.<класс>.<метод>
ЧастьОписаниеПримеры
ПроектИмя проектаapp, io
Типmodel или apimodel — CrudApi, api — CoreApi
КлассИмя API классаuser, session, notification
МетодИмя action (без action)search, create, save, delete

Важно: метод указывается без префикса action. Фреймворк сам добавит префикс при вызове.

Примеры

// Поиск через CrudApi
$result = \IO\Core::callAction('app.model.user.search', [
    'filter' => ['status' => 'active'],
    'limit'  => 20,
]);

// Получение по ID
$result = \IO\Core::callAction('app.model.user.getByID', ['pkid' => 42]);

// Создание
$result = \IO\Core::callAction('app.model.user.create', [
    'item' => ['name' => 'Иван', 'email' => 'ivan@example.com'],
]);

// Обновление
$result = \IO\Core::callAction('app.model.user.save', [
    'pkid' => 42,
    'item' => ['name' => 'Иван Петров'],
]);

// Удаление
$result = \IO\Core::callAction('app.model.user.delete', ['pkid' => 42]);

// Вызов кастомного API
$result = \IO\Core::callAction('app.api.notification.send', [
    'to'      => 'user@example.com',
    'message' => 'Привет!',
]);

// Сессия
$result = \IO\Core::callAction('app.model.session.login', [
    'login'    => 'admin',
    'password' => 'secret',
]);

// Загрузка файлов
$result = \IO\Core::callAction('app.model.document.upload', [
    'item' => ['name' => 'Документ'],
], 0, 1); // filesupload = 1

IO\Core::callActionQuiet()

Вызов action с перехватом вывода в буфер.

public static function callActionQuiet(
    string $entity,
    $params,
    string &$content,
    int $fromentity = 0,
    int $filesupload = 0
): mixed
$result = \IO\Core::callActionQuiet(
    'app.api.report.render',
    ['report_id' => 1],
    $html  // сюда запишется HTML-вывод action
);
// $result — данные action
// $html — захваченный вывод

Вспомогательные методы

entityToFile()

Парсинг entity-строки в структуру данных.

public static function entityToFile(string $entity, array $params = []): ?array
$info = \IO\Core::entityToFile('app.class.user.getById', [
    'hasMethod' => true,
    'isAction'  => false,
]);
// [
//     'source'  => 'app',
//     'type'    => 'class',
//     'method'  => 'getById',
//     'class'   => '\App\Classes\User',
//     'postfix' => 'class.user',
// ]

Instance()

Создание экземпляра класса по entity.

public static function Instance(string $entity): object
$user = \IO\Core::Instance('app.class.user');
// Экземпляр \App\Classes\User

checkRules()

Проверка разрешений для метода.

public static function checkRules(array $entity_arr): int
$errorCode = \IO\Core::checkRules([
    'class'  => '\App\Api\UserApi',
    'method' => 'actionSearch',
    'type'   => 'api',
]);
// EIO_OK если разрешено, EIO_DENY если нет

signData()

Генерация HMAC-подписи для межсерверных запросов.

public static function signData(string $entity, array $data, int $time): string

sendData()

HTTP-запрос через cURL.

public static function sendData(
    string $url,
    array $post,
    ?string $cookie = '',
    bool $log_echo = false
): array

Возвращает: [response, http_code, raw_output]


Межсерверное взаимодействие

Локальные вызовы

Если source = app, io или текущий проект — вызов выполняется локально:

\IO\Core::callAction('app.model.user.search', [...]);
// → \App\Api\UserApi::actionSearch(...)

Удалённые вызовы

Если source — другой проект из $ioProjects, запрос отправляется через HTTP:

\IO\Core::callAction('com.sso.class.user.login', [...]);
// → HTTP POST http://sso.devkdt.io/gate/com.sso.class.user.login/

Защита

  • Проверка IP-адресов серверов ($ioProjectsIP)
  • HMAC-подпись запросов (IOSECRETKEY)
  • Проверка rules() классов
  • Время жизни запроса (120 секунд)

См. также

  • Обзор API
  • Создание API
  • CRUD операции
Prev
Обзор API
Next
Создание API