yii interactive console
PHP
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
dev
src
tests
.gitignore
README.md
RELEASE_NOTES.md
composer.json
composer.lock
phpunit.xml

README.md

Yiiic - интерактивная консоль для Yii2

Интерактивная yiiic консоль реализует умный автокомплит и контекстный воркфлоу.

  1. Установка
  2. Интеграция в проект и запуск
  3. Умный автокомплит
  4. Служебные комманды
  5. Конфигурация
  6. События

Установка

composer require ltd-beget/yiiic

Интеграция в проект

Добавить yiiic компонент в конфиг консольного приложения

$application = new yii\console\Application([
    ...
    'components' => [
        'yiiic' => [
            'class' => \LTDBeget\Yiiic\Yiiic::class
        ]
    ]
]);

Отнаследовать консольный конроллер как точку входа в интерактивный режим от \LTDBeget\Yiiic\YiiicController

use yii\console\Controller;

class YiiicController extends \LTDBeget\Yiiic\YiiicController
{

}

Далее запуск

yii yiiic [... options]

Каждая команда выполняется в отдельном процессе

Умный автокомплит

При работе с консолью, нажатие TAB вызывает автоподсказку возможных контроллеров/экшенов/опций. При реализации интерфейса ArgsCompleterInterface возможен комплит по аргументам. Автокомплит работает по контексту, то есть если вы ввели migrate [press TAB] и нажали таб, то получите список экшенов для migrate.

Служебные комманды

  • c - перейти в контекст
  • h - помощь
  • q - выход

Комманды можно передавать в любом месте, следующие вызовы равнозначны

migrate create c
c migrate create

Для запуска комманды без контекста используется префикс /

Конфигурация

Конфигурация в порядке возрастания приоритета:

  • default - дефолтный пресет
  • component config
  • cli config (путь к конфигу при запуске yiiic режима (yii yiiic --config=custom/config/path) )
  • cli option (значение конкретного опшена, список доступных)

Дефолтный пресет


[
    // внешние зависимости
    'entities' => [
    // $options полностью собранный массив настроек(после мержа всех источников)
    // apiReflector должен имплементить LTDBeget\Yiiic\ApiReflectorInterface
       'apiReflector' => function($options) {
            return new ApiReflector($options['ignore']);
        }
    ],
    'options' => [
        // не выводить в хелпе
        'ignore' => ['yiiic', 'help'],
        'prompt' => 'yiiic',
        'show_help' => Conf::SHOW_HELP_ONCE,
        // если вылезет exception
        'show_trace' => false,
        // путь к скрипту консольного приложения
        'entry_script' => Conf::ENTRY_SCRIPT_CURRENT,
        'commands' => [
            'context' => 'c',
            'quit' => 'q',
            'help' => 'h'
        ],
        'without_context_prefix' => '/',
        // высота в строках хелпа, если не будет
        // помещаться, рассчитается так чтоб влезло
        'height_help' => 5,
        // стили для стильных
        'style' => [
            'prompt' => [Console::FG_GREEN, Console::BOLD],
            'welcome' => [Console::FG_YELLOW, Console::BOLD],
            'bye' => [Console::FG_YELLOW, Console::BOLD],
            'notice' => [Console::FG_YELLOW, Console::BOLD],
            'error' => [Console::BG_RED],
            'help' => [
                'title' => [Console::FG_YELLOW, Console::UNDERLINE],
                'content' => [Console::FG_YELLOW, Console::ITALIC]
            ],
            'result' => [
                'border' => [Console::FG_CYAN],
                'content' => [Console::FG_CYAN],
                'separator' => '=' 
            ]
        ]
    ]  
];

Cli options

--trace - options.show_trace

--script - options.entry_script

События

  • Yiiic::EVENT_BEFORE_RUN_ACTION
  • Yiiic::EVENT_AFTER_RUN_ACTION

Подписка либо через конфиг компонента, либо имплементить YiiicController::prepareYiiic()

class YiiicController extends \LTDBeget\Yiiic\YiiicController
{

    protected function prepareYiiic(Yiiic $yiiic)
    {
        $yiiic->on(Yiiic::EVENT_BEFORE_RUN_ACTION, 'func');
    }

}