Новое в Symfony 4.4: Улучшения консоли

Компонент 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