window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() PHP Ontwikkeling. Symfony Console-component - Tips & Trucs - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2022-04-14
Software Ontwikkeling

PHP Ontwikkeling. Symfony Console Component - Tips & Trucs

The Codest

Sebastian Luczak

PHP Eenheidsleider

Dit artikel is gemaakt met het doel om je de nuttigste en handigste tips en trucs over Symfony Console Development te laten zien.

Als je een PHP ontwikkelaar die jouw PHP softwareontwikkeling naar het volgende niveau is dit artikel voor jou. Laten we meteen ter zake komen.

Inleiding

Je hoort het vaak:
​

PHP wordt alleen gebruikt om webpagina's te maken

afbeelding

​
Dit is helemaal niet waar, want tegenwoordig PHP ontwikkeling wordt gebruikt in veel verschillende bedrijfssectoren, die op het eerste gezicht vaak niet zo triviaal zijn.

Zowel de PHP taal en de bijbehorende omgeving ondersteunen HTTP-communicatie perfect, wat het samen met het gebruik van de CLI-omgeving mogelijk maakt om snel webbots, webcrawlers of tools te maken die gegevens in externe omgevingen synchroniseren.
​
Om dit te ondersteunen heb ik wat statistieken die laten zien dat de Console-component van de Symfony raamwerk, dat eenvoudig toegang geeft tot de commandoregel, staat in de TOP5 meest gebruikte en gedownloade Symfony pakketten aller tijden.

​
afbeelding

​

​
Op dit punt willen we graag een paar trucjes met je delen die elke PHP ontwikkelaar moet weten als je schrijft code in PHP die verondersteld wordt te werken in de CLI.
​

Interactieve selectietabel met aangepaste gegevensbron

​
afbeelding
​

Tabelweergave met de mogelijkheid om invoer te kiezen kan op een eenvoudige manier worden bereikt met behulp van Symfony Commando:

// src/App/Command/TestCommand.php

    beschermde functie uitvoeren(InputInterface $input, OutputInterface $output): int
    {
        $io = nieuwe SymfonyStyle($input, $output);
        $io->titel("Interactieve selectietabel voorbeeld");

        $table = $io->createTable();
        $table->setHeaderTitle("Interactieve selectietabel voorbeeld");
        $table->setRows(iterator_to_array($this->tagsTableRows());
        $table->render();
        $io->newLine();

        return Command::SUCCESS;
    } 

​
In bovenstaand voorbeeld maken we gebruik van PHP Generatoren als gegevensbron - wat de schaalbaarheid in de toekomst ten goede komt. Eenvoudige gegevensgenerator voor bovenstaand voorbeeld:

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

Het eindresultaat is een Tabel die wordt weergegeven in CLI.
​
afbeelding
​

Om het interactief te maken moeten we QuestionHelper gebruiken, dat wordt geleverd als wrapper rond SymfonyStyle output.

  (...)
    $choice = nieuwe Keuzevraag(
        vraag: "Welke selectie kiest u?",
        keuzes: array_reduce(
            array: $rows,
            callback: functie($carry, $item) {
                $carry[] = $item[0];

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

Als resultaat krijgen we een interactief keuzeveld met een tabelweergave van dezelfde bron.
​

Gebruik altijd verborgen prompt voor gevoelige gebruikersgegevens

​
afbeelding
​

Het verbergen van prompts terwijl gevoelige gegevens worden verstrekt is een veelgebruikte praktijk en het is ook gemakkelijk te bereiken in Symfony Console.
Je kunt de ingebouwde wrapper in SymfonyStyle klasse aan de hand van het volgende voorbeeld:

  (...)
    beschermde functie uitvoeren(InputInterface $input, OutputInterface $output): int
    {
        $io = nieuwe SymfonyStyle($input, $output);
        $io->titel("Gebruiker om gevoelige gegevens vragen");
        $io->askHidden(
            vraag: "Geef hier je API-sleutel op",
            validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
        );

        return Command::SUCCESS;
    }

Geef uw voortgangsbalken stijl

​
afbeelding
​

Om de gebruiker te informeren over de voortgang kunnen we voortgangsbalken gebruiken. Symfony Console heeft een geweldige manier om de voortgang aan de gebruiker te tonen, maar vergeet niet om je voortgangsuitvoer altijd op de juiste manier te stylen. Je kunt volledige controle hebben over verschillende onderdelen en hoe ze worden weergegeven met behulp van Opmaak. Het formaat van de voortgangsbalk bestaat uit een reeks verschillende plaatsaanduidingen. De beschikbare plaatsaanduidingen zijn: huidige, max, bar, procent, verstreken, overgebleven, geschat, geheugen en bericht. Speel ermee met het onderstaande voorbeeld.

(...)
 beschermde functie uitvoeren(InputInterface $input, OutputInterface $output): int
 {
 $io = nieuwe SymfonyStyle($input, $output);
 $io->titel("Voorbeeld gestileerde voortgangsbalk");

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

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

 return Command::SUCCESS;
 }

Je kunt bijna alles gebruiken als formatter zolang je terminal het maar kan weergeven. Officiële Symfony documentatie
​

Suggesties geven voor je consoleopdrachten

​
afbeelding
​

We zijn in ons ontwikkelingsleven gewend aan consolesuggesties, auto-aanvulfuncties en dergelijke. Als je een consoletoepassing maakt, zou je moeten overwegen om deze toe te voegen, zodat je gebruikers niet in verwarring raken over het gebruik van je CLI-oplossing op laag niveau. PHP Symfony Console kan dat ook, out of the box, met behulp van AfrondingInvoer klasse.

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

Printen waar je maar wilt

​
Symfony 5.1 introduceerde een nieuwe manier voor het omgaan met de positie van de cursor in CLI-toepassingen. Sindsdien is het mogelijk om te lezen en schrijven op een specifieke plaats op het scherm met behulp van handige Cursor 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;
    }

afbeelding
Deze korte lijst met trucs is slechts het topje van de ijsberg. De mogelijkheden van Symfony Console zijn eindeloos, zoals blijkt uit de talloze projecten zoals Psalm, PHPStan of Composer die zijn gebaseerd op PHP en gebruikt door miljoenen PHP ontwikkelaars over de hele wereld.

vaandel samenwerking

Verwante artikelen

Software Ontwikkeling

Twee redenen om PHP niet te gebruiken

Als PHP ontwikkelaar herinner ik me nog de dagen van PHP4, de eerste (optionele!) GC implementatie in PHP5, en ik heb de _hype_ van de komst van PHP7 en...

The Codest
Sebastian Luczak PHP Eenheidsleider
Software Ontwikkeling

Interne vs. externe ontwikkelaars inhuren

Intern of extern aanwerven? Het is een ultiem dilemma! Ontdek de voordelen van outsourcing of het opbouwen van een in-house team in het volgende artikel.

The Codest
Grzegorz Rozmus Java Eenheid Leader

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

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