The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2022-04-14
Desenvolvimento de software

Desenvolvimento PHP. Componente de Consola Symfony - Dicas e Truques

The Codest

Sebastian Luczak

PHP Chefe de unidade

Este artigo foi criado com o objetivo de lhe mostrar as dicas e truques mais úteis e recuperáveis sobre o Symfony Console Development.

Se é um PHP criador que quer trazer o seu PHP desenvolvimento de software para o nível seguinte, este artigo é para si. Sem mais demoras, vamos diretos ao assunto.

Introdução

Ouve-se muitas vezes:
​

O PHP só é utilizado para criar páginas Web

imagem

​
Isto é completamente falso porque hoje em dia Desenvolvimento do PHP é utilizado em muitos domínios de atividade diferentes, muitas vezes não tão triviais à primeira vista.

Tanto o PHP e o seu ambiente suportam perfeitamente a comunicação HTTP, o que, juntamente com a utilização do ambiente CLI, permite criar rapidamente web bots, web crawlers ou ferramentas que sincronizam dados em ambientes externos.
​
Para apoiar esta afirmação, tenho algumas estatísticas que mostram que a componente Consola do Estrutura Symfonyque permite o acesso fácil à linha de comando, está no TOP5 dos mais utilizados e descarregados Symfony pacotes de todos os tempos.

​
imagem

​

​
Neste momento, gostaríamos de partilhar consigo alguns truques que qualquer Desenvolvedor PHP deve saber ao escrever código em PHP que é suposto funcionar no CLI.
​

Tabela de seleção interactiva com fonte de dados personalizada

​
imagem
​

A renderização de tabelas com a capacidade de selecionar entradas pode ser conseguida de uma forma fácil utilizando Symfony Comando:

// src/App/Command/TestCommand.php

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Exemplo de tabela de seleção interactiva");

        $table = $io->createTable();
        $table->setHeaderTitle("Exemplo de tabela de seleção interactiva");
        $table->setRows(iterator_to_array($this->tagsTableRows()));
        $table->render();
        $io->newLine();

        return Command::SUCCESS;
    } 

​
No exemplo acima, estamos a tirar partido de PHP Geradores como fonte de dados - o que ajuda a escalabilidade no futuro. Gerador de dados simples para o exemplo acima:

    protected function tagsTableRows(): Generator
    {
        $apiTagsResponse = $this->someInjectedService->getTags();
        foreach ($apiTagsResponse as $apiTagResponse) {
            yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
        }
    }

O resultado final é uma tabela apresentada em CLI.
​
imagem
​

Para o tornar interativo, precisamos de utilizar o QuestionHelper, fornecido como um invólucro em torno de SymfonyStyle saída.

  (...)
    $choice = new ChoiceQuestion(
        pergunta: "Que seleção escolheu?",
        escolhas: array_reduce(
            array: $rows,
            callback: function($carry, $item) {
                $carry[] = $item[0];

                return $carry;
            }
        )
    );
    $answer = $io->askQuestion($choice);
   (...)

Como resultado, estamos a obter um campo de escolha interativo com uma apresentação de tabela a partir da mesma fonte.
​

Utilize sempre um prompt oculto para dados sensíveis do utilizador

​
imagem
​

Esconder o prompt enquanto fornece dados sensíveis é uma prática comum e também é facilmente alcançável em Symfony Consola.
Pode utilizar o wrapper incorporado em SymfonyStyle através do seguinte exemplo:

  (...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Pedir dados sensíveis ao utilizador");
        $io->askHidden(
            question: "Forneça sua chave de API aqui",
            validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
        );

        return Command::SUCCESS;
    }

Estilizar as barras de progresso

​
imagem
​

Para comunicar algum progresso ao utilizador, podemos utilizar barras de progresso. Symfony A consola tem uma excelente forma de mostrar o progresso ao utilizador, mas lembre-se sempre de estilizar corretamente a saída de progresso. Você pode ter controle total sobre as diferentes partes e como elas são renderizadas usando Formatador. O formato da barra de progresso é apenas uma sequência de diferentes marcadores de posição. Os marcadores de posição disponíveis são: atual, máximo, bar, por cento, decorrido, restantes, estimado, memória e mensagem. Utilize o exemplo abaixo para os manipular.

(...)
 protected function execute(InputInterface $input, OutputInterface $output): int
 {
 $io = new SymfonyStyle($input, $output);
 $io->title("Exemplo de barra de progresso estilizada");

 $progressBar = new ProgressBar($io, 10000);
 $progressBar->setFormat('%current%/%max% [r%] %percent:3s%%
 %elapsed:6s%/%estimated:-6s% %memory:6s%');
 $progressBar->start();
 para ($i = 0; $i advance();
 usleep(420);
 }

 $progressBar->finish();
 $io->newLine();

 return Command::SUCCESS;
 }

Pode utilizar quase tudo como formatador, desde que o seu terminal seja capaz de o mostrar. Oficial Symfony documentação
​

Fornecer sugestões para os comandos da consola

​
imagem
​

Estamos habituados a sugestões de consola, funcionalidades de preenchimento automático, etc., na nossa vida de desenvolvimento. Se estiver a criar uma aplicação de consola, deve considerar adicioná-la para que os seus utilizadores não fiquem confusos sobre como utilizar a sua solução CLI de baixo nível. PHP O Symfony Console também pode fornecer isso, fora da caixa, usando CompletionInput classe.

(...)
    public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
    {
        if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
            $suggestions->suggestValues(['someSuggestion', 'otherSuggestion']);
        }
    }

Imprimir onde quiser

​
Symfony 5.1 introduziu uma nova forma de lidar com a posição do cursor em aplicações CLI. Desde então, é possível ler e escrever num local específico do ecrã utilizando o prático Cursor classe:

(...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Cursor example");
​
        $cursor = new Cursor($io);
        $cursor->clearScreen();
        for ($x = 0; $x <= 10; $x++) {
            for ($y = 0; $y <= 10; $y++) {
                $cursor->moveToPosition($x, $y);
​
                if ($y === $x) {
                    $io->write(".");
                }
            }
        }
        $io->write("Hello, World!");
        $io->newLine();
​
        return Command::SUCCESS;
    }

imagem
Esta pequena lista de truques é apenas a ponta do icebergue. As possibilidades de Consola Symfony são infinitas, como o comprovam os numerosos projectos como Psalm, PHPStan ou Composer que se baseiam em PHP e utilizado por milhões de Desenvolvedores PHP em todo o mundo.

faixa de cooperação

Artigos relacionados

Desenvolvimento de software

Duas razões para não utilizar o PHP

Como desenvolvedor do PHP, ainda me lembro dos dias do PHP4, da primeira implementação (opcional!) do GC no PHP5, e vivi o _hype_ do advento do PHP7 e...

The Codest
Sebastian Luczak PHP Chefe de unidade
Desenvolvimento de software

Contratação de programadores internos vs. externos

Contratar internamente ou externamente? É o derradeiro dilema! Descubra as vantagens da outsourcing ou da criação de uma equipa interna no artigo seguinte.

The Codest
Grzegorz Rozmus Líder de unidade Java

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese