iocli — IO7 Framework CLI
Внимание
Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!
Обзор
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_table | roles | CreateRolesTable |
add_column_to_users | users | CreateAddColumnToUsersTable |
roles | roles | CreateRolesTable |
Сигнатура: 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
Добавление пользовательских команд
- Создайте класс в
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;
}
}
- Зарегистрируйте в
app/Module.php:
public static function registerCommands(\IO\Console\Kernel $kernel): void
{
$kernel->register('email:send', \App\Commands\SendEmailCommand::class);
}
- Используйте:
$ 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:migration | app/Migrations/ |
make:factory | app/Factories/ |
make:seeder | app/Seeders/ |
make:middleware | app/Middlewares/ |
make:route | app/Routes/ |
make:test | app/Testing/Unit/ |
make:command | app/Commands/ |
make:api | app/Api/ |
make:class | app/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:class | app/Classes/ | IO\Classes |
make:api | app/Api/ | App\Api |
make:route | app/Routes/ | App\Routes |
make:middleware | app/Middlewares/ | App\Middlewares |
make:migration | app/Migrations/ | App\Migrations |
make:factory | app/Factories/ | App\Factories |
make:seeder | app/Seeders/ | App\Seeders |
make:test | app/Testing/Unit/ | App\Testing\Unit |
make:command | app/Commands/ | App\Commands |
Фреймворк (не трогать):
| Класс | Путь | Namespace |
|---|---|---|
SqlClass | modules/io7/php/SqlClass.php | IO |
Migration | modules/io7/php/Database/Migration.php | IO\Database |
Seeder | modules/io7/php/Database/Seeder.php | IO\Database |
Factory | modules/io7/php/Database/Factory.php | IO\Database |
TableBuilder | modules/io7/php/Database/TableBuilder.php | IO\Database |
ScheduleTemplate | modules/io7/php/Console/ScheduleTemplate.php | IO\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=app | app/ | App\ |
--module=crm | modules/crm/php/ | IO\Crm\ |
--module=io7 | modules/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.php | namespace 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;