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

iocli — IO7 Framework CLI

Внимание

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

  • Обзор
  • Точка входа
  • Синтаксис аргументов и опций
  • Информация
    • app:version
  • База данных
    • migrate
    • migrate:rollback
    • migrate:status
    • migrate:fresh
    • db:seed
  • Генераторы (make:)
    • make:migration
    • make:class (аналог make:model в Laravel)
    • make:api
    • make:factory
    • make:seeder
    • make:test
    • make:command
    • make:route
    • make:middleware
  • Кеш
    • cache:clear
    • cache:forget
    • config:cache
  • Маршруты
    • route:list
    • route:clear
  • Очереди
    • queue:work
    • queue:listen
    • queue:restart
    • queue:failed
    • queue:retry
  • Расписание
    • schedule:run
    • schedule:list
    • schedule:status
  • Разработка
    • serve
    • tinker
    • command:run
  • Добавление пользовательских команд
  • Справка
  • Изменения в последней версии
    • make:class — флаги для генерации
    • Пути файлов
    • Короткие ключи
    • migrate:status
    • migrate:rollback
    • db:seed
  • Правки
    • tinker — не завершается при ошибке
    • serve — локальная разработка
    • schedule:list, schedule:status, schedule:run
  • Структура проекта
    • Генераторы создают файлы в:
    • Фреймворк (не трогать):
    • Cron задачи
  • Модули (--module)
    • Правила
    • Примеры
    • Связывание файлов
    • Namespace правила

Обзор

iocli — CLI скрипт фреймворка IO7. Все команды выполняются через php iocli <команда> [аргументы] [--опции].

Встроенные команды хранятся в modules/io7/php/Console/Commands/. Пользовательские команды — в app/Commands/ и регистрируются в app/Module.php.

Точка входа

// src/iocli
$kernel = new \IO\Console\Kernel();
\IO\Module::registerCommands($kernel);       // встроенные команды
\App\Module::registerCommands($kernel);      // пользовательские команды
exit($kernel->run());

Синтаксис аргументов и опций

ФорматОписаниеПример
{name}Позиционный аргументmake:migration create_users
{--flag}Булевый флаг (true/false)queue:work --once
{--key=value}Опция со значениемserve --port=9000
{--flag|f}Длинный + короткий ключmake:class Role -m
-mКороткий ключ (алиас)make:class Role -m
-mfpНесколько коротких ключейmake:class Role -mfp

Короткие ключи — это сокращения для длинных опций. Определяются в сигнатуре команды как {--migration|m}. Тогда -m эквивалентно --migration.

Примеры:

# Длинные ключи
php iocli make:class Role --migration --factory --seed

# Короткие ключи (эквивалентно)
php iocli make:class Role -m -f -s

# Комбинированные короткие ключи (эквивалентно)
php iocli make:class Role -mfs

# Смешанные
php iocli make:class Role --table=roles -mfs

Информация

app:version

Показать версию приложения и PHP.

$ php iocli app:version

База данных

migrate

Выполнить все не выполненные миграции. Поддерживает трекинг через таблицу migrations.

$ php iocli migrate

migrate:rollback

Откатить миграции последнего batch.

$ php iocli migrate:rollback

migrate:status

Показать статус всех миграций (выполнены / ожидают).

$ php iocli migrate:status

migrate:fresh

Удалить все таблицы и выполнить миграции заново.

$ php iocli migrate:fresh

db:seed

Выполнить сидеры.

$ php iocli db:seed
$ php iocli db:seed --class=UserSeeder

Генераторы (make:)

make:migration

Создать файл миграции. Автоматически определяет имя таблицы.

ПримерТаблицаКласс
create_roles_tablerolesCreateRolesTable
add_column_to_usersusersCreateAddColumnToUsersTable
rolesrolesCreateRolesTable

Сигнатура: make:migration {name} {--module=}

ФлагКороткийОписание
--module—Имя папки модуля, в котором будет создана миграция (modules/<name>)

Примеры:

# Миграция создания таблицы в app
$ php iocli make:migration create_roles_table

# Миграция создания таблицы в модуле io7
$ php iocli make:migration create_roles_table --module=io7

# Миграция изменения таблицы в app
$ php iocli make:migration alter_users_table
$ php iocli make:migration add_avatar_to_users
$ php iocli make:migration change_status_to_users
$ php iocli make:migration delete_status_to_users

# Миграция удаления таблицы в app
$ php iocli make:migration delete_users_table
$ php iocli make:migration drop_users_table

make:class (аналог make:model в Laravel)

Создать SqlClass (модель). Поддерживает флаги для генерации сопутствующих файлов.

Сигнатура: make:class {name} {--table=} {--migration|m} {--factory|f} {--seed|s} {--api|a} {--all}

ФлагКороткийОписание
--migration-mСоздать миграцию
--factory-fСоздать фабрику
--seed-sСоздать сидер
--api-aСоздать API класс
--all—Все вместе (-mfsa)
--table=—Имя таблицы

Примеры:

# Только класс
$ php iocli make:class Role

# Класс + миграция + фабрика + сидер
$ php iocli make:class Role -mfs

# Всё вместе
$ php iocli make:class Role --all

# С указанием таблицы
$ php iocli make:class User --table=users -mfs

# С API классом
$ php iocli make:class Role --api

make:api

Создать API класс (CrudApi).

$ php iocli make:api User

make:factory

Создать фабрику (с Faker).

$ php iocli make:factory User

make:seeder

Создать сидер.

$ php iocli make:seeder User

make:test

Создать тест.

$ php iocli make:test User

make:command

Создать CLI команду.

$ php iocli make:command SendEmail

make:route

Создать класс маршрутов.

$ php iocli make:route Web

make:middleware

Создать middleware.

$ php iocli make:middleware Auth

Кеш

cache:clear

Очистить весь кеш.

$ php iocli cache:clear

cache:forget

Удалить конкретный ключ из кеша.

$ php iocli cache:forget my_key

config:cache

Кешировать конфигурацию.

$ php iocli config:cache

Маршруты

route:list

Показать все маршруты.

$ php iocli route:list

route:clear

Очистить кеш маршрутов.

$ php iocli route:clear

Очереди

queue:work

Запустить воркер очереди.

$ php iocli queue:work
$ php iocli queue:work --queue=emails --once

queue:listen

Прослушивать очередь.

$ php iocli queue:listen --queue=emails

queue:restart

Перезапустить воркеры очереди.

$ php iocli queue:restart

queue:failed

Показать неудачные задания.

$ php iocli queue:failed

queue:retry

Повторить неудачное задание по ID.

$ php iocli queue:retry 42

Расписание

schedule:run

Выполнить запланированные cron задачи.

$ php iocli schedule:run
$ php iocli schedule:run --id=3
$ php iocli schedule:run --class=App\Crons\CleanUpCron

schedule:list

Показать список cron задач.

$ php iocli schedule:list

schedule:status

Показать статус cron задач.

$ php iocli schedule:status

Разработка

serve

Запустить встроенный dev сервер.

$ php iocli serve
$ php iocli serve --port=9000
$ php iocli serve --host=0.0.0.0 --port=8080

tinker

Запустить интерактивную консоль.

$ php iocli tinker

command:run

Запустить произвольную команду по имени.

$ php iocli command:run SendEmail
$ php iocli command:run App\Commands\SendEmailCommand

Добавление пользовательских команд

  1. Создайте класс в app/Commands/:
<?php
namespace App\Commands;

use IO\Console\Command;

class SendEmailCommand extends Command
{
    protected string $signature = 'email:send {user_id} {--queue|q} {--subject=}';
    protected string $description = 'Отправить email пользователю';

    public function handle(): int
    {
        $userId = $this->argument('user_id');
        $queue = $this->option('queue');
        $subject = $this->option('subject') ?? 'Без темы';

        $this->info("Email отправлен пользователю {$userId}, тема: {$subject}");
        return 0;
    }
}
  1. Зарегистрируйте в app/Module.php:
public static function registerCommands(\IO\Console\Kernel $kernel): void
{
    $kernel->register('email:send', \App\Commands\SendEmailCommand::class);
}
  1. Используйте:
$ php iocli email:send 42 --subject="Привет"
$ php iocli email:send 42 -q --subject="Привет"

Справка

$ php iocli
IO7 CLI — Список команд:

  app:version       Показать версию приложения
  make:migration    Создать файл миграции
  make:seeder       Создать файл сидера
  make:factory      Создать файл фабрики (с Faker)
  make:test         Создать файл теста
  make:class        Создать SqlClass (модель)
  make:api          Создать API класс
  make:command      Создать CLI команду
  make:route        Создать класс маршрутов
  make:middleware   Создать middleware класс
  migrate           Выполнить все миграции
  migrate:rollback  Откатить последние миграции
  migrate:fresh     Удалить все таблицы и выполнить миграции
  migrate:status    Показать статус миграций
  db:seed           Выполнить сидеры
  cache:clear       Очистить весь кеш
  cache:forget      Удалить ключ из кеша
  config:cache      Кешировать конфигурацию
  route:list        Показать все маршруты
  route:clear       Очистить кеш маршрутов
  schedule:run      Выполнить cron задачи
  schedule:list     Показать список cron задач
  schedule:status   Показать статус cron задач
  queue:work        Запустить воркер очереди
  queue:listen      Слушать очередь
  queue:restart     Перезапустить воркеры очереди
  queue:failed      Показать неудачные задания очереди
  queue:retry       Повторить неудачное задание
  serve             Запустить встроенный dev сервер
  tinker            Запустить интерактивную консоль
  command:run       Запустить кастомную команду

Изменения в последней версии

make:class — флаги для генерации

ФлагКороткийОписание
--migration-mСоздать миграцию
--factory-fСоздать фабрику
--seed-sСоздать сидер
--api-aСоздать API класс
--all—Все вместе
--table=—Имя таблицы

Все созданные файлы содержат declare(strict_types=1);, связаны с моделью через use IO\Classes\Xxx.

Пути файлов

ГенераторПуть
make:migrationapp/Migrations/
make:factoryapp/Factories/
make:seederapp/Seeders/
make:middlewareapp/Middlewares/
make:routeapp/Routes/
make:testapp/Testing/Unit/
make:commandapp/Commands/
make:apiapp/Api/
make:classapp/Classes/

Короткие ключи

Сигнатура команды {--migration|m} позволяет использовать -m вместо --migration:

php iocli make:class Role -mfsa
php iocli make:class User --table=users -mf

migrate:status

Показывает статус (выполнена / ожидает) и batch каждой миграции.

migrate:rollback

Откатывает миграции последнего batch (в обратном порядке).

db:seed

Выполняет сидеры из app/Seeders/. Автоматически подключается к БД.


Правки

tinker — не завершается при ошибке

При ошибке в коде выводит сообщение и ждёт новую команду (catch Throwable).

serve — локальная разработка

ФлагОписание
--local, -lИспользовать router.php для локальной разработки
--router=Указать путь к router.php
# Обычный запуск
php iocli serve

# Локальная разработка с router.php
php iocli serve --local
php iocli serve -l

# Кастомный router
php iocli serve --router=/path/to/router.php

Локальный режим: php -S host:port -t public/ router.php

schedule:list, schedule:status, schedule:run

Теперь автоматически подключаются к БД (как migrate, db:seed).


Структура проекта

Генераторы создают файлы в:

ГенераторПутьNamespace
make:classapp/Classes/IO\Classes
make:apiapp/Api/App\Api
make:routeapp/Routes/App\Routes
make:middlewareapp/Middlewares/App\Middlewares
make:migrationapp/Migrations/App\Migrations
make:factoryapp/Factories/App\Factories
make:seederapp/Seeders/App\Seeders
make:testapp/Testing/Unit/App\Testing\Unit
make:commandapp/Commands/App\Commands

Фреймворк (не трогать):

КлассПутьNamespace
SqlClassmodules/io7/php/SqlClass.phpIO
Migrationmodules/io7/php/Database/Migration.phpIO\Database
Seedermodules/io7/php/Database/Seeder.phpIO\Database
Factorymodules/io7/php/Database/Factory.phpIO\Database
TableBuildermodules/io7/php/Database/TableBuilder.phpIO\Database
ScheduleTemplatemodules/io7/php/Console/ScheduleTemplate.phpIO\Console

Cron задачи

// app/Crons/MyCron.php
namespace App\Crons;
use IO\Console\ScheduleTemplate;

class MyCron extends ScheduleTemplate
{
    public function cron_ask(): bool { return true; }
    public function cron_do(): void { /* логика */ }
}

Регистрация: вставить в таблицу cron:

INSERT INTO cron (file, classname, enable, time_period, max_threads, time_work, description, last_run)
VALUES ('/app/Crons/MyCron.php', 'MyCron', 1, 60, 1, 1, '', '1999-01-01 00:00:00');

Запуск: php iocli schedule:run


Модули (--module)

Все генераторы поддерживают флаг --module для создания файлов в модуле вместо app/:

# По умолчанию — в app/ (App\ namespace)
php iocli make:class User

# В модуль crm (modules/crm/php/ → IO\Crm\ namespace)
php iocli make:class User --module=crm

# В фреймворк io7 (modules/io7/php/ → IO\ namespace)
php iocli make:class User --module=io7

Правила

ФлагПутьNamespace
(нет)app/App\
--module=appapp/App\
--module=crmmodules/crm/php/IO\Crm\
--module=io7modules/io7/php/IO\

Примеры

// php iocli make:class User --module=crm
// → modules/crm/Classes/User.php
// namespace IO\Crm\Classes;

// php iocli make:api User --module=crm
// → modules/crm/Api/UserApi.php
// namespace IO\Crm\Api;

// php iocli make:migration create_users --module=crm
// → modules/crm/Migrations/2026_06_30_create_users.php
// namespace IO\Crm\Migrations;

// php iocli make:middleware Auth --module=crm
// → modules/crm/Middlewares/AuthMiddleware.php
// namespace IO\Crm\Middlewares;

Связывание файлов

При использовании make:class --api -m с модулем, все файлы создаются в одном модуле:

  • Класс → modules/crm/Classes/User.php (IO\Crm\Classes)
  • API → modules/crm/Api/UserApi.php (IO\Crm\Api, ссылается на IO\Crm\Classes\User)
  • Миграция → modules/crm/Migrations/... (IO\Crm\Migrations)

Namespace правила

МодульNamespaceОпределение
app/App\Фиксированный
modules/io7/php/IO\Фиксированный
Другие модулиИз Module.phpnamespace Crm; в файле

Файл Module.php модуля определяет namespace:

<?php
namespace Crm;  // ← все классы модуля в Crm\

class Module
{
    public static function module_name(): string { return 'crm'; }
}

Генераторы читают namespace из Module.php автоматически:

php iocli make:class User --module=crm
# → modules/crm/Classes/User.php
# namespace Crm\Classes;
Prev
Обзор CLI
Next
Кастомные CLI команды