Вы когда-нибудь задумывались, как автоматизировать рутинные задачи в вашем проекте на Yii2? Консольные команды — это мощный инструмент, который позволяет выполнять скрипты прямо из терминала, без веб-интерфейса. В этой статье я расскажу, как создавать свои команды, передавать им параметры и избегать типичных ошибок. Поехали!
Что такое консольные команды в Yii2?
Консольные команды в Yii2 — это специальные классы, которые наследуются от yii\console\Controller. Они работают в командной строке, например, для очистки кэша, отправки email-рассылок или импорта данных. Это как обычный контроллер, но без HTML-шаблонов и с доступом к консольному вводу-выводу.
Пример простой команды:
<?php
namespace app\commands;
use yii\console\Controller;
class HelloController extends Controller
{
public function actionIndex()
{
echo "Hello, World!\n";
}
}Чтобы запустить её, в терминале нужно выполнить: php yii hello. Команда выведет "Hello, World!" и завершится.
Создание своей первой команды
Давайте создадим команду, которая будет логировать события. Предположим, нам нужно записывать время запуска в файл. Создаём класс LoggerController в папке commands.
<?php
namespace app\commands;
use yii\console\Controller;
use Yii;
class LoggerController extends Controller
{
public function actionLog()
{
$message = date('Y-m-d H:i:s') . ' - Команда выполнена';
file_put_contents(Yii::getAlias('@runtime/logs/command.log'), $message . PHP_EOL, FILE_APPEND);
echo "Лог записан.\n";
}
}Теперь запускаем php yii logger/log. В папке runtime/logs появится файл с записью. Просто и эффективно.
Yii::getAlias() для указания путей, чтобы команда работала на любом сервере без правок.Передача аргументов и опций
Часто нужно передавать данные в команду. Например, указать, какой именно лог писать. В Yii2 это делается через аргументы и опции. Аргументы — это обязательные параметры, опции — необязательные с дефолтными значениями.
Пример с аргументом:
public function actionLog($message = 'default')
{
echo "Сообщение: $message\n";
}Запуск: php yii logger/log "Мое сообщение". Если не передать значение, будет использовано 'default'.
Опции задаются через свойства класса:
public $verbose = false;
public function options($actionID)
{
return ['verbose'];
}
public function actionLog()
{
if ($this->verbose) {
echo "Подробный вывод\n";
}
}Запуск с опцией: php yii logger/log --verbose=1. Опции удобны для настройки поведения.
| Тип | Описание | Пример |
|---|---|---|
| Аргумент | Обязательный параметр в порядке вызова | php yii command arg1 |
| Опция | Необязательный параметр с именем | php yii command --name=value |
Взаимодействие с пользователем
Консольные команды могут запрашивать ввод от пользователя. Это полезно для подтверждения опасных операций. Yii2 предоставляет методы prompt() и confirm().
public function actionDeleteAll()
{
$confirm = $this->confirm('Вы уверены, что хотите удалить все данные?');
if ($confirm) {
// удаление
echo "Данные удалены.\n";
} else {
echo "Операция отменена.\n";
}
}При запуске php yii my/delete-all появится запрос: Вы уверены, что хотите удалить все данные? [yes/no]:. Пользователь вводит ответ.
confirm() для всех деструктивных операций (очистка БД, удаление файлов). Это спасёт от случайных ошибок.Работа с миграциями в консоли
Yii2 поставляется с встроенными консольными командами для миграций. Они находятся в классе yii\console\controllers\MigrateController. Основные команды:
php yii migrate— применить новые миграции.php yii migrate/create create_user_table— создать новую миграцию.php yii migrate/down— откатить последнюю миграцию.
Эти команды работают из коробки, но их можно кастомизировать. Например, указать другую папку для миграций через опцию --migrationPath=@app/migrations.
Обработка ошибок и коды завершения
Консольные команды могут возвращать коды завершения. 0 — успех, любое другое число — ошибка. Это важно для автоматизации, когда скрипты проверяют результат.
public function actionCheck()
{
if (some_condition) {
echo "Ошибка\n";
return 1;
}
echo "Успех\n";
return 0;
}В терминале можно проверить код: echo $? после выполнения команды.
Что в итоге?
Консольные команды в Yii2 — это простой способ автоматизировать задачи. Вы научились создавать команды, передавать им параметры, запрашивать подтверждение у пользователя и обрабатывать ошибки. Используйте их для бэкапов, очистки кэша, импорта данных и других рутинных операций. Это сэкономит часы времени.
Помните: консольные команды — не магия, а инструмент. Чем чаще вы их применяете, тем быстрее ваш проект становится гибким и управляемым.


