window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } 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 Utvikling. Symfony-konsollkomponent - tips og triks - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2022-04-14
Programvareutvikling

PHP Utvikling. Symfony-konsollkomponent - tips og triks

The Codest

Sebastian Luczak

PHP Enhetsleder

Denne artikkelen ble opprettet med sikte på å vise deg de mest nyttige og nyttige tipsene og triksene om Symfony Console Development.

Hvis du er en PHP utvikler som ønsker å bringe din PHP programvareutvikling til neste nivå, er denne artikkelen noe for deg. La oss komme til saken.

Innledning

Man hører det ofte:
​

PHP brukes kun til å lage nettsider

bilde

​
Dette er fullstendig usant, for i dag PHP-utvikling brukes på mange ulike forretningsområder, ofte ikke så trivielle ved første øyekast.

Både PHP og dets miljø støtter HTTP-kommunikasjon perfekt, noe som sammen med bruk av CLI-miljøet gjør det mulig å raskt lage webroboter, webcrawlere eller verktøy som synkroniserer data i eksterne miljøer.
​
For å underbygge dette har jeg statistikk som viser at konsollkomponenten i Rammeverket Symfonysom gir enkel tilgang til kommandolinjen, er blant de TOPP5 mest brukte og nedlastede Symfony pakker gjennom tidene.

​
bilde

​

​
Nå vil vi gjerne dele noen triks med deg som alle PHP utvikler bør vite når du skriver kode i PHP som skal fungere i CLI.
​

Interaktiv utvalgstabell med egendefinert datakilde

​
bilde
​

Tabellgjengivelse med mulighet til å velge oppføringer fra kan oppnås på en enkel måte ved hjelp av Symfony Kommando:

// src/App/Command/TestCommand.php

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

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

        return Command::SUCCESS;
    } 

​
I eksempelet ovenfor benytter vi oss av PHP Generatorer som datakilde - noe som bidrar til skalerbarhet i fremtiden. Enkel datagenerator for eksempelet ovenfor:

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

Sluttresultatet er en tabell gjengitt i CLI.
​
bilde
​

For å gjøre det interaktivt må vi bruke QuestionHelper, som er en innpakning rundt SymfonyStyle utgang.

  (...)
    $choice = new ChoiceQuestion(
        question: "Hvilket valg velger du?",
        valg: array_reduce(
            array: $rows,
            callback: function($carry, $item) {
                $carry[] = $item[0];

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

Resultatet er at vi får et interaktivt valgfelt med en tabellvisning fra samme kilde.
​

Bruk alltid skjult ledetekst for sensitive brukerdata

​
bilde
​

Det er vanlig å skjule ledeteksten mens man oppgir sensitive data, og det er også lett å oppnå i Symfony Konsoll.
Du kan bruke en innebygd wrapper i SymfonyStyle klassen ved hjelp av følgende eksempel:

  (...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Ber brukeren om sensitive data");
        $io->askHidden(
            question: "Oppgi API-nøkkelen din her",
            validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
        );

        return Command::SUCCESS;
    }

Style fremdriftslinjene dine

​
bilde
​

For å kommunisere fremdriften til brukeren kan vi bruke fremdriftslinjer. Symfony Konsollen er en flott måte å vise fremdriften til brukeren på, men husk alltid å utforme fremdriftsresultatet på riktig måte. Du kan ha full kontroll over de ulike delene og hvordan de gjengis ved hjelp av Formatter. Fremdriftslinjeformatet er bare en rekke forskjellige plassholdere. De tilgjengelige plassholderne er: nåværende, maks, bar, prosent, utløpt, resterende, anslått, minne og melding. Prøv deg frem med eksemplet nedenfor.

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

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

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

 return Command::SUCCESS;
 }

Du kan bruke nesten hva som helst som formateringsformat, så lenge terminalen din er i stand til å vise det. Offisielle Symfony dokumentasjon
​

Gi forslag til konsollkommandoer

​
bilde
​

Vi er vant til konsollforslag, autofullføringsfunksjoner og lignende i utviklingslivet vårt. Hvis du lager en konsollapplikasjon, bør du vurdere å legge til dette, slik at brukerne ikke blir forvirret over hvordan de skal bruke din CLI-løsning på lavt nivå. PHP Symfony Console kan også tilby dette, uten videre, ved hjelp av CompletionInput klasse.

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

Skriv ut hvor du vil

​
Symfony 5.1 introduserte en ny måte å håndtere markørposisjonen på i CLI-applikasjoner. Siden den gang har det vært mulig å lese og skrive på et bestemt sted på skjermen ved hjelp av hendige Markør klasse:

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

bilde
Denne korte listen over triks er bare toppen av isfjellet. Mulighetene for Symfony-konsollen er uendelige, noe som bevises av de mange prosjektene som Psalm, PHPStan eller Composer som er basert på PHP og brukes av millioner av PHP-utviklere rundt om i verden.

samarbeidsbanner

Relaterte artikler

Programvareutvikling

To grunner til at du ikke bør bruke PHP

Som PHP-utvikler husker jeg fortsatt dagene med PHP4, den første (valgfrie!) GC-implementeringen i PHP5, og jeg levde gjennom _hype_ av fremveksten av PHP7 og ...

The Codest
Sebastian Luczak PHP Enhetsleder
Programvareutvikling

Ansette interne vs. eksterne utviklere

Ansette internt eller eksternt? Det er det ultimate dilemmaet! I denne artikkelen kan du lese om fordelene ved å outsource eller bygge opp et internt team.

The Codest
Grzegorz Rozmus Leder for Java-enheten

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

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

    Polen - Lokale teknologisentre

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

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

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