Компонент Console является одним из самых популярных и зрелых компонентов Symfony. Даже если некоторые разработчики считают, что это уже полнофункционально, в каждой новой версии Symfony добавляем в нее некоторые небольшие новые функции.
Сделайте обязательным возвращение статуса завершения команды
Состояние выхода — это число, переданное родительскому процессу (или вызывающей стороне), когда процесс или команда завершили выполнение своей задачи. Состояние выхода 0 означает, что команда выполнена успешно, а любое другое число означает некоторую ошибку.
Однако в командах Symfony принято не возвращать этот статус выхода. Фактически, обычно ничего не возвращают из команды execute()
:
// src/Command/CreateUserCommand.php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CreateUserCommand extends Command
{
protected static $defaultName = 'app:create-user';
// ...
protected function execute(InputInterface $input, OutputInterface $output)
{
// ...
}
}
В Symfony 4.4 осудили это поведение, и вам предлагается возвращать целое число со статусом выхода вашей команды:
protected function execute(InputInterface $input, OutputInterface $output)
{
// ...
return 0;
}
Возврат статуса выхода является обязательным в Symfony 5, поэтому лучше начните добавлять эти возвраты в свои команды, чтобы вы были готовы к обновлению.
Настройка обрезки ответов
При использовании помощника по вопросам для задания вопросов в консоли вводимый пользователем ответ обрезается автоматически. Хотя это наиболее распространенное поведение на сегодняшний день, в некоторых случаях это нежелательно.
В Symfony 4.4 добавили новый метод setTrimmable()
, чтобы вы могли изменить поведение по умолчанию:
use Symfony\Component\Console\Question\Question;
public function execute(InputInterface $input, OutputInterface $output)
{
$helper = $this->getHelper('question');
$question = new Question('What is the secret code?');
$question->setTrimmable(false);
// ...
}
Если пользователь вводит
abc 1234, это именно то значение, которое вы получите, вместо значения по умолчанию
abc 1234.
Стандартный способ отключения цветных escape-кодов ANSI
Команды Symfony используют множество управляющих кодов ANSI, чтобы добавить цвет к своему выводу. Хотя большинству людей это нравится, некоторые люди предпочитают полностью отключить эту функцию. С самого первого дня Symfony позволил отключить это, добавив параметр --no-ansi
при выполнении команды.
Однако проблема заключается в том, что каждый проект, инструмент и библиотека определяют разные способы отключения кодов ANSI. Вот почему проект no-color.org предложил использовать переменную окружения NO_COLOR
в качестве стандартного способа отключения кодов ANSI в каждом программном обеспечении.
В Symfony 4.4 добавили поддержку этой переменной окружения (но также сохранили опцию --no-ansi
), так что теперь вы можете отключить коды ANSI, выполнив следующие команды:
NO_COLOR=1 php bin/console app:my-command