window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() PHP Utveckling. Symfony konsolkomponent - tips och tricks - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2022-04-14
Utveckling av programvara

PHP utveckling. Symfony konsolkomponent - tips och tricks

Codest

Sebastian Luczak

PHP Enhetschef

Den här artikeln skapades i syfte att visa dig de mest användbara och hämta tips och tricks om Symfony Console Development.

Om du är en PHP utvecklare som vill ta med sig din PHP Utveckling av programvara till nästa nivå är den här artikeln för dig. Utan ytterligare ado låt oss skära till jakten.

Inledning

Det hör man ofta:
​

PHP används endast för att skapa webbsidor

bild

​
Detta är helt felaktigt eftersom det nuförtiden PHP utveckling används inom många olika affärsområden, ofta inte så triviala vid första anblicken.

Både PHP och dess miljö har ett perfekt stöd för HTTP-kommunikation, vilket tillsammans med användningen av CLI-miljön gör det möjligt att snabbt skapa webbrobotar, web crawlers eller verktyg som synkroniserar data i externa miljöer.
​
Som stöd för detta har jag lite statistik som visar att konsolkomponenten i Symfony-ramverksom ger enkel åtkomst till kommandoraden, är bland de TOP5 mest använda och nedladdade Symfony paket genom tiderna.

​
bild

​

​
Nu vill vi dela med oss av några knep som alla kan använda PHP utvecklare bör veta när man skriver kod i PHP som är tänkt att fungera i CLI.
​

Interaktiv urvalstabell med anpassad datakälla

​
bild
​

Tabellrendering med möjlighet att välja poster från kan uppnås på ett enkelt sätt med hjälp av Symfony Kommando:

// src/App/Command/TestCommand.php

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Exempel på interaktiv urvalstabell");

        $table = $io->createTable();
        $table->setHeaderTitle("Exempel på interaktiv urvalstabell");
        $able->setRows(iterator_to_array($this->tagsTableRows()));
        $able->render();
        $io->newLine();

        return Command::SUCCESS;
    } 

​
I ovanstående exempel utnyttjar vi PHP Generatorer som datakälla - vilket hjälper till med skalbarheten i framtiden. Enkel datagenerator för ovanstående exempel:

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

Slutresultatet är en tabell som återges i CLI.
​
bild
​

För att göra det interaktivt måste vi använda QuestionHelper, som tillhandahålls som ett hölje runt SymfoniStyle utgång.

  (...)
    $choice = new ChoiceQuestion(
        fråga: "Vilket val väljer du?",
        choices: array_reduce(
            array: $rows,
            callback: function($carry, $item) {
                $carry[] = $item[0];

                return $carry;
            }
        )
    );
    $answer = $io->ställa fråga($choice);
   (...)

Resultatet är att vi får ett interaktivt valfält med en tabellvisning från samma källa.
​

Använd alltid dold prompt för känslig användardata

​
bild
​

Att dölja snabbmeddelanden samtidigt som man tillhandahåller känslig information är ett vanligt förfarande och det är också lätt att uppnå i Symfony Konsol.
Du kan använda den inbyggda wrappern i SymfoniStyle klass enligt följande exempel:

  (...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Frågar användaren om känsliga uppgifter");
        $io->askHidden(
            fråga: "Ange din API-nyckel här",
            validator: function($answer) { return (42 == strlen($answer)) ?? 1TP60Svar; }
        );

        return Command::SUCCESS;
    }

Styla dina Progress Bars

​
bild
​

För att förmedla vissa framsteg till användaren kan vi använda Progress Bars. Symfony Console är ett utmärkt sätt att visa framsteg för användaren, men kom alltid ihåg att utforma dina framsteg på rätt sätt. Du kan ha full kontroll över olika delar och hur de återges med hjälp av Formaterare. Förloppsindikatorns format är bara en sträng med olika platshållare. De tillgängliga platshållarna är: ström, max, bar, procent, förflutit, kvarvarande, uppskattad, minne och meddelande. Försök med dem med hjälp av exemplet nedan.

(...)
 protected function execute(InputInterface $input, OutputInterface $output): int
 {
 $io = new SymfonyStyle($input, $output);
 $io->title("Exempel på stiliserad progressbar");

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

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

 return Kommando::SUCCESS;
 }

Du kan använda nästan vad som helst som formaterare så länge din terminal kan visa det. Officiell Symfony dokumentation
​

Ge förslag till dina konsolkommandon

​
bild
​

Vi är vana vid konsolförslag, autokompletteringsfunktioner och liknande i vårt utvecklingsliv. Om du skapar en konsolapplikation bör du överväga att lägga till det så att dina användare inte blir förvirrade över hur de ska använda din CLI-lösning på låg nivå. PHP Symfony Console kan också tillhandahålla det, direkt ur lådan, med hjälp av SlutförandeInput klass.

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

Skriv ut var du vill

​
Symfony 5.1 introducerade ett nytt sätt att hantera markörens position i CLI-program. Sedan dess är det möjligt att läsa och skriva på en specifik plats på skärmen med hjälp av praktiska Markör klass:

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

bild
Den här korta listan med knep är bara toppen av isberget. Möjligheterna med Symfony-konsolen är oändliga, vilket framgår av de många projekt som Psalm, PHPStan eller Composer som är baserade på PHP och används av miljontals människor PHP utvecklare runt om i världen.

samarbetsbanner

Relaterade artiklar

Utveckling av programvara

Två skäl till att du inte bör använda PHP

Som en PHP-utvecklare minns jag fortfarande dagarna för PHP4, den första (valfria!) GC-implementeringen i PHP5, och jag levde genom _hype_ av tillkomsten av PHP7 och ...

Codest
Sebastian Luczak PHP Enhetschef
Utveckling av programvara

Anställning av interna eller externa utvecklare

Anställa internt eller externt? Det är det ultimata dilemmat! Ta reda på fördelarna med outsourcing eller att bygga upp ett internt team i följande artikel.

Codest
Grzegorz Rozmus Enhetschef Java

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokala tekniknav

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

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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