Рубрики
Uncategorized

Способ практики Yii – Команда консоли консоли консоли консоли

Автор оригинала: David Wong.

Набросок

Структура консольного приложения очень похожа на веб-приложение 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.";