Набросок
Структура консольного приложения очень похожа на веб-приложение Yii, которое в основном используется для выполнения на сервере терминалов.
Консольные команды
Структура консольного приложения очень похожа на веб-приложение в Yii.
Он состоит из одного или нескольких классов контроллеров консоли yii, которые обычно называются “командами” в консольных средах. Каждый контроллер также может выполнять одно или несколько действий, как и веб-контроллер.
Оба шаблона проекта (базовый шаблон и расширенный шаблон) имеют свои собственные консольные приложения. Вы можете запустить сценарий Yii в базовом каталоге на складе, запустив его.
Когда вы запустите его без каких-либо параметров, вам будет предоставлен список доступных команд:
Как вы можете видеть на скриншоте, Yii определил набор команд, доступных по умолчанию:
Контроллер ресурсов контроллеров Yiiconsole – Позволяет объединять и сжимать файлы JavaScript и CSS.
Контроллеры Yiiconsole CacheController – Очистите кэш приложений.
Контроллеры Yiiconsole Контроллер приспособлений – Управляет загрузкой и разгрузкой приспособлений для модульных испытаний.
Yiiconsole controllers HelpController – Предоставляет справочную информацию о консольных командах, которые являются командами по умолчанию и выводят вывод, показанный на скриншоте выше.
Контроллер сообщений контроллеров Yiiconsole – Извлекает информацию о переводе из исходных файлов.
Контроллеры Yiiconsole MigrateController – Управление миграцией базы данных приложений.
использование Для выполнения операций контроллера консоли можно использовать следующий синтаксис:
yii[--option1=value1 --option2=value2 ... argument1 argument2 ...]
Выше <маршрут> относится к маршрутизации действий контроллера. Параметры заполняют атрибуты класса, которые являются параметрами методов действия.
Например, в
yii\console\controllers\MigrateController::actionUp()
Ограничение 5 миграций баз данных и
yii\console\controllers\MigrateController::$migrationTable
Настройка миграции должна вызывать следующее:
yii migrate/up 5 --migrationTable=migrations
Примечание: При использовании в консоли Не забывайте выглядеть как” “Аналогично, кавычки используются, чтобы избежать выполнения команд в командной оболочке, как и все имена файлов в текущем каталоге.
Сценарий ввода
Сценарий ввода для консольных приложений эквивалентен индексу. Файл ввода PHP для веб-приложений. Сценарии ввода в консоль часто называются Yii и находятся в корневом каталоге приложения. Он содержит код, аналогичный следующему:
#!/usr/bin/env phprun(); exit($exitCode);
Сценарий будет создан как часть вашего приложения; вы можете изменить его в соответствии с вашими потребностями. Если вам не нужно записывать информацию об ошибках или вы хотите повысить общую производительность, константа YII_DEBUG должна быть определена как false.
Как в базовых, так и в расширенных шаблонах приложений режим отладки по умолчанию включен для сценариев ввода консольных приложений, чтобы обеспечить лучшую среду для разработчиков.
Для настройки
Как вы можете видеть в приведенном выше коде, консольное приложение использует свой собственный файл конфигурации, называемый console. php. В этом файле вы можете настроить различные компоненты и свойства приложения для консоли.
Если ваше веб-приложение и консольное приложение совместно используют большое количество параметров и значений конфигурации, вы можете рассмотреть возможность размещения этих значений в отдельном файле, включающем конфигурацию приложения (веб-и консольного). Вы можете увидеть пример в Расширенном шаблоне проекта.
Совет: Иногда вам может потребоваться настроить другую консольную команду из приложения, указанного в сценарии ввода. Например, вы можете использовать команду Yii migrate для обновления тестовой базы данных, которая настроена в каждом наборе тестов.
Чтобы динамически изменить конфигурацию, просто укажите файл конфигурации для пользовательского приложения и выполните команду с помощью опции AppConfig:
yii--appconfig=path/to/config.php ...
Контроллер и поведение консоли
Консольная команда наследуется от класса контроллера контроллера консоли yii. В классе контроллера определяется одно или несколько действий, соответствующих подкомандам контроллера. В каждом действии напишите свой код для выполнения соответствующих задач для определенной подкоманды.
При выполнении команды вам необходимо указать маршрут контроллера. Например, маршрутизация migrate/create вызывает метод действия MigrateController контроллеров консоли yii:: action Create (), соответствующий подкоманде.
Если маршрут, предоставленный во время выполнения, не содержит идентификатор маршрута, выполняются операции по умолчанию (например, веб-контроллеры).
вариант
Переопределяя методы в параметрах (), вы можете указать параметры, которые могут использоваться для консольных команд (идентификатор контроллера/действия). Этот метод должен возвращать список общих атрибутов класса контроллера.
При выполнении команды вы можете указать значение для использования параметра синтаксис. Это присваивает значение параметра свойству Имя параметра класса контроллера.
параметр
В дополнение к параметрам команды также могут получать параметры. Параметр будет передан запрошенной подкоманде, соответствующей способу работы. Первый параметр соответствует первому параметру, второй параметр соответствует второму параметру и так далее.
При вызове команды, если параметров недостаточно, если определены значения по умолчанию, соответствующие параметры будут принимать объявленные значения по умолчанию; если значения по умолчанию не заданы и во время выполнения значения не указаны, команда завершится с ошибкой.
Вы можете использовать приглашение типа массива, чтобы указать, что параметр следует рассматривать как массив. Массив создается путем разделения запятых во входной строке.
В следующем примере показано, как объявлять параметры:
class ExampleController extends \yii\console\Controller{ // The command "yii example / create test" calls "action Create ('test')" public function actionCreate($name) { ... } // The command "yii example / index city" calls "action index ('city','name')" // The command "yii example / index city id" calls "action index ('city','id')" public function actionIndex($category, $order = 'name') { ... } // The command "yii example / add test" calls "actionAdd (['test'])" // The command "yii example / add test1, test2" calls "actionAdd (['test1','test2'])" public function actionAdd(array $name) { ... } }
Код выхода
Использование кода выхода-лучшая практика для разработки консольных приложений.
Обычно при успешном выполнении команды возвращается 0. Если команда возвращает ненулевое число, считается, что произошла ошибка.
Возвращенный номер используется в качестве кода ошибки для понимания деталей ошибки.
Например, 1 может представлять неизвестную ошибку, и весь код останется в определенной ситуации: ошибки ввода, отсутствующие файлы и так далее.
Чтобы получить консольную команду для возврата кода выхода, вам нужно всего лишь вернуть целое число в методе работы контроллера:
public function actionIndex(){ if (/* some problem */) { echo "A problem occured!\n"; return 1; } // do something return 0; }
Вы можете использовать некоторые предопределенные константы:
Контроллер:: Значение EXIT_CODE_НОРМАЛЬНОЕ равно 0;
Контроллер:: ОШИБКА EXIT_CODE_ERROR равна 1.
Рекомендуется определять значимые константы для контроллеров на случай, если существует больше типов кодов ошибок.
Формат и цвет
Yii поддерживает форматированный вывод, который автоматически переходит в форматированный вывод, если терминал выполняет команды, которые его не поддерживают.
Легко выводить строки в формате. Ниже показано, как вывести текст, выделенный жирным шрифтом:
$this->stdout("Hello?\n", Console::BOLD);
Если вам нужно создать несколько стилей динамической комбинации строк, лучше всего использовать формат ansi:
$name = $this->ansiFormat('Alex', Console::FG_YELLOW); echo "Hello, my name is $name.";