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

    • О фреймворке
    • Уроки
    • Структура
    • Доступ к участкам проекта
    • Старые версии фреймворка
    • Разворачивание нового проекта
  • Backend

    • Функции фреймворка
    • Настройки проекта (app/i.php)
    • Настройки composer
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • IOCore класс
    • Controller и работа с ними
    • Class и работа с ними
    • Model и работа с ними
    • View и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioSession->user и работа с пользователем
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • JS плагины
    • Отложенная загрузка JS скриптов
    • Обращение к Model через JS
  • Примеры

    • AutoIncrement, зависящий от полей

IO v6. Доступ к участкам проекта

Термины

  • Gate Protocol – протокол общения между двумя бэкендами. Этот протокол позволяет вызывать статические методы class. Для авторизации используется секретный ключ и проверка по IP адресу.
  • Entity Protocol – протокол общения между фронтендом и бэкендом. Этот протокол позволяет вызывать методы model. Для авторизации используется токен авторизации, сохраненный в cookie.
  • Entity Name – название сущности, к которой нужно обратиться.

Описание

В данной версии фреймворка доступ к class, model, view, controller любого проекта осущствляется следующим образом:

Используется нотация "точка". Каждый элемент разделяется знаком точки.

Первое слово (или набор слов, разделяемых точкой) - это apiname проекта, в котором находится требуемый файл (например: com это проект кабинет, com.notice это проект системы уведомлений и т.д. Полный список проектов и их apiname содержится в глобальной переменной $ioProjects, а apiname проекта устанавливается в переменной IOPROJECT в файле project/conf.php). Если обращение происходит к локальному файлу (файлу текущего проекта), то используется слово app. Есл иобращение происходит к файлу фреймворка, то используется слово io.

Второе слово - это тип файла.
Существует всего 4 типа:

  • class.
  • model.
  • view.
  • controller.

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

Четвертое слово - это имя требуемого файла.

Пятое слово - (только для class и model) название вызываемой функции.

  • Для model - название функции без префикса action и do, начиная с маленькой буквы.
  • Для class - название функции, начиная с маленькой буквы.

Пример:

// вызов функции dbsearch2() class файла app/class/cms/widgets.php проекта com
'com.class.cms.widgets.dbsearch2'

// вызов функции doWorld() локального model файла app/model/helloModel.php
'app.model.hello.world'

// ссылка на view файл фреймворка app/io/app/view/global/anyfile.html
'io.view.global.anyfile'

// ссылка на локальный controller файл app/controller/mainController.php
'app.controller.main'

Обращение к Entity Protocol

Адрес Entity Protocol:

http://<домен_проекта>/entity/<entity_name>/?resultType=json&resultNoParams=0&account=56340&lang=ru

Обращаться через Entity Protocol можно только к model.

Get параметры:

  • resultType: возвращаемый результат.
    • html: в формате html.
    • json: в формате json (рекомендуется по умолчанию).
    • serialize: в формате serialize array.
  • resultNoParams: результат не должен содержать входных параметров.
    • 1: да (если передается большой файл, то нужно использовать эту опцию).
    • 0: нет (рекомендуется во всех остальных случаях).
  • account: под каким аккаунтом нужно выполнять код.
  • lang: язык.
    • ru: русский (рекомендуется по умолчанию).

Передаваемые cookie:

  • bmc_session: сессия.

Post параметры:

  • entitypost: массив входных данных.

Выходные данные:

  • params: входные данные, если resultNoParams=0.
  • method: метод, который был вызван.
  • res: результат операции.
  • res.error_code: номер ошибки.
  • res.error_str: текст ошибки.
  • content: что выводила функция через echo.
  • ms: серверное время выполнения функции.
{
    "resultNoParams": false,
    "params": {
        "resultNoParams": "0",
        "account": "56340",
        "lang": "ru"
    },
    "method": "com.notice.model.notices.getUnreadedCount",
    "res": {
        "error_code": 1,
        "error_str": "",
        "count": 0
    },
    "content": "",
    "ms": -356
}

Обращение к Gate Protocol

Чтобы обратиться к Gate Protocol, нужно отправить POST запрос по адресу:

http://<домен_проекта>/gate/<entity_name>/

Обращаться через Gate Protocol можно только к class.

Post параметры:

  • entitypost: массив входных данных.
  • sign: подпись сервера, который отправил запрос.
  • time: время отправки запроса.

Выходные данные:

  • serverfrom: с какого сервера пришел ответ.
  • method: метод, который был вызван.
  • res.error_code: номер ошибки.
  • res.error_str: текст ошибки.
  • content: что выводила функция через echo.
  • ms: серверное время выполнения функции.

Данные всегда возвращаются в формате JSON.

Метод подписи

$str = $entity . '|' . $time;
$sign = hash_hmac('sha512', $str, IOSECRETKEY);

Во время проверки подписи проверяется время формирования пакета. Если пакет был сформирован более 2х минут назад, то этот запрос считается устаревшим и выдается ошибка EIO_DENY.

Prev
Структура
Next
Старые версии фреймворка