window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() PHP Development. Komponent konsoli Symfony - porady i wskazówki - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2022-04-14
Software Development

PHP Development. Komponent konsoli Symfony - porady i wskazówki

The Codest

Sebastian Łuczak

Lider jednostki PHP

Ten artykuł został stworzony w celu pokazania najbardziej przydatnych i przydatnych wskazówek i sztuczek dotyczących rozwoju konsoli Symfony.

Jeśli jesteś PHP deweloper która chce przynieść PHP rozwój oprogramowania na wyższy poziom, ten artykuł jest dla Ciebie. Bez zbędnych ceregieli przejdźmy do rzeczy.

Wprowadzenie

Często słyszy się:
​

PHP jest używany tylko do tworzenia stron internetowych

obraz

​
Jest to całkowicie nieprawdziwe, ponieważ obecnie Rozwój PHP jest wykorzystywana w wielu różnych obszarach biznesowych, często nie tak banalnych na pierwszy rzut oka.

Zarówno PHP i jego środowisko doskonale obsługują komunikację HTTP, co w połączeniu z wykorzystaniem środowiska CLI umożliwia szybkie tworzenie botów internetowych, web crawlerów czy narzędzi synchronizujących dane w środowiskach zewnętrznych.
​
Na poparcie tej tezy mam kilka statystyk, które pokazują, że komponent konsoli Framework Symfony, która umożliwia łatwy dostęp do wiersza poleceń, znajduje się w TOP5 najczęściej używanych i pobieranych aplikacji. Symfony pakietów wszech czasów.

​
obraz

​

​
W tym miejscu chcielibyśmy podzielić się z Tobą kilkoma sztuczkami, które każdy Deweloper PHP powinien wiedzieć podczas pisania kod w PHP która powinna działać w CLI.
​

Interaktywna tabela wyboru z niestandardowym źródłem danych

​
obraz
​

Renderowanie tabeli z możliwością wyboru wpisów można uzyskać w prosty sposób za pomocą Symfony Polecenie:

// src/App/Command/TestCommand.php

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Przykład interaktywnej tabeli wyboru");

        $table = $io->createTable();
        $table->setHeaderTitle("Przykład interaktywnej tabeli wyboru");
        $table->setRows(iterator_to_array($this->tagsTableRows()));
        $table->render();
        $io->newLine();

        return Command::SUCCESS;
    } 

​
W powyższym przykładzie wykorzystujemy Generatory PHP jako źródło danych - co pomaga w skalowalności w przyszłości. Prosty generator danych dla powyższego przykładu:

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

Efektem końcowym jest tabela renderowana w CLI.
​
obraz
​

Aby uczynić go interaktywnym, musimy użyć QuestionHelper, dostarczonego jako wrapper wokół SymfonyStyle wyjście.

  (...)
    $choice = new ChoiceQuestion(
        question: "Który wybór wybierasz?",
        choices: array_reduce(
            array: $rows,
            callback: function($carry, $item) {
                $carry[] = $item[0];

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

W rezultacie otrzymujemy interaktywne pole wyboru z tabelą wyświetlaną z tego samego źródła.
​

Zawsze używaj ukrytego monitu dla poufnych danych użytkownika

​
obraz
​

Ukrywanie podpowiedzi przy jednoczesnym udostępnianiu wrażliwych danych jest powszechną praktyką i jest również łatwo osiągalne w Symfony Konsola.
Możesz użyć wbudowanego wrappera w SymfonyStyle na poniższym przykładzie:

  (...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Zapytanie użytkownika o wrażliwe dane");
        $io->askHidden(
            question: "Podaj tutaj swój klucz API",
            validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
        );

        return Command::SUCCESS;
    }

Styl pasków postępu

​
obraz
​

Aby zakomunikować użytkownikowi postęp, możemy użyć pasków postępu. Symfony Konsola ma świetny sposób na pokazanie postępu użytkownikowi, ale zawsze należy pamiętać o prawidłowym stylu wyjścia postępu. Możesz mieć pełną kontrolę nad różnymi częściami i sposobem ich renderowania za pomocą Formatter. Format paska postępu to po prostu ciąg różnych symboli zastępczych. Dostępne symbole zastępcze to: bieżący, maks, pasek, procent, upłynął, pozostały, szacowany, pamięć i wiadomość. Można to zrobić na poniższym przykładzie.

(...)
 protected function execute(InputInterface $input, OutputInterface $output): int
 {
 $io = new SymfonyStyle($input, $output);
 $io->title("Przykład stylizowanego paska postępu");

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

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

 return Command::SUCCESS;
 }

Możesz użyć prawie wszystkiego jako formatyzatora, o ile twój terminal jest w stanie go wyświetlić. Oficjalny Symfony dokumentacja
​

Podaj sugestie dotyczące poleceń konsoli

​
obraz
​

Jesteśmy przyzwyczajeni do sugestii konsoli, funkcji autouzupełniania i tym podobnych w naszym życiu programistycznym. Jeśli tworzysz aplikację konsolową, powinieneś rozważyć dodanie jej, aby użytkownicy nie byli zdezorientowani, jak korzystać z niskopoziomowego rozwiązania CLI. PHP Symfony Console również może to zapewnić, po wyjęciu z pudełka, używając CompletionInput klasa.

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

Drukuj w dowolnym miejscu

​
Symfony 5.1 wprowadziła nowy sposób obsługi pozycji kursora w aplikacjach CLI. Od tego czasu możliwe jest odczytywanie i zapisywanie w określonym miejscu na ekranie za pomocą przydatnych funkcji Kursor klasa:

(...)
    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;
    }

obraz
Ta krótka lista sztuczek to tylko wierzchołek góry lodowej. Możliwości Konsola Symfony są nieskończone, o czym świadczą liczne projekty, takie jak Psalm, PHPStan czy Composer, które bazują na PHP i używane przez miliony Programiści PHP na całym świecie.

baner współpracy

Powiązane artykuły

Software Development

Dwa powody, dla których nie powinieneś używać PHP

Jako programista PHP wciąż pamiętam czasy PHP4, pierwszą (opcjonalną!) implementację GC w PHP5 i przeżyłem _hype_ związany z nadejściem PHP7 i...

The Codest
Sebastian Łuczak Lider jednostki PHP
Software Development

Zatrudnianie programistów wewnętrznych vs. zewnętrznych

Zatrudniać wewnętrznie czy zewnętrznie? To ostateczny dylemat! Poznaj zalety outsourcing lub budowania zespołu wewnętrznego w poniższym artykule.

The Codest
Grzegorz Rozmus Java Unit Leader

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polska

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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