#Yiiic - интерактивная консоль для Yii2
Интерактивная yiiic
консоль реализует умный автокомплит и контекстный воркфлоу.
##Установка
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');
}
}