window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes 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 Udvikling. Symfony-konsolkomponent - tips og tricks - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2022-04-14
Udvikling af software

PHP udvikling. Symfony-konsolkomponent - tips og tricks

Codest

Sebastian Luczak

PHP Enhedsleder

Denne artikel er lavet med det formål at vise dig de mest nyttige og nyttige tips og tricks om Symfony Console Development.

Hvis du er en PHP Udvikler der ønsker at bringe din PHP softwareudvikling til det næste niveau, er denne artikel noget for dig. Lad os uden videre komme til sagen.

Introduktion

Det hører man ofte:
​

PHP bruges kun til at lave websider

billede

​
Det er fuldstændig usandt, for i dag PHP udvikling bruges inden for mange forskellige forretningsområder, ofte ikke så trivielle ved første øjekast.

Både den PHP sproget og dets miljø understøtter HTTP-kommunikation perfekt, hvilket sammen med brugen af CLI-miljøet gør det muligt hurtigt at oprette webrobotter, webcrawlere eller værktøjer, der synkroniserer data i eksterne miljøer.
​
For at understøtte dette har jeg nogle statistikker, der viser, at konsolkomponenten i Symfony-rammeværksom giver nem adgang til kommandolinjen, er blandt de TOP5 mest brugte og downloadede Symfony pakker nogensinde.

​
billede

​

​
På dette tidspunkt vil vi gerne dele et par tricks med dig, som enhver PHP udvikler bør vide, når man skriver Kode i PHP der skal fungere i CLI.
​

Interaktiv udvælgelsestabel med brugerdefineret datakilde

​
billede
​

Tabelgengivelse med mulighed for at vælge poster fra kan opnås på en nem måde ved hjælp af 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 udvælgelsestabel");

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

        return Command::SUCCESS;
    } 

​
I ovenstående eksempel udnytter vi PHP Generatorer som datakilde - hvilket hjælper med skalerbarhed i fremtiden. Simpel datagenerator til ovenstående eksempel:

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

Slutresultatet er en tabel, der gengives i CLI.
​
billede
​

For at gøre det interaktivt skal vi bruge QuestionHelper, der leveres som et omslag omkring SymfonyStyle output.

  (...)
    $choice = new ChoiceQuestion(
        spørgsmål: "Hvilket valg vælger du?",
        choices: 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 tabelvisning fra samme kilde.
​

Brug altid skjult prompt til følsomme brugerdata

​
billede
​

Det er almindeligt at skjule en prompt, mens man leverer følsomme data, og det er også let at opnå i Symfony Konsol.
Du kan bruge den indbyggede wrapper i SymfonyStyle klasse ved hjælp af følgende eksempel:

  (...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Beder brugeren om følsomme data");
        $io->askHidden(
            spørgsmål: "Angiv din API-nøgle her",
            validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
        );

        return Command::SUCCESS;
    }

Style dine statuslinjer

​
billede
​

For at kommunikere nogle fremskridt til brugeren kan vi bruge Progress Bars. Symfony Console er en fantastisk måde at vise brugeren fremskridt på, men husk altid at style dine fremskridt korrekt. Du kan have fuld kontrol over forskellige dele, og hvordan de gengives, ved at bruge Formaterer. Statuslinjens format er blot en række forskellige pladsholdere. De tilgængelige pladsholdere er: nuværende, max, bar, procent, forløbet, resterende, anslået, hukommelse og besked. Leg med dem med eksemplet nedenfor.

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

 $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;
 }

Du kan bruge næsten hvad som helst som formattering, så længe din terminal kan vise det. Officiel Symfony dokumentation
​

Giv forslag til dine konsolkommandoer

​
billede
​

Vi er vant til konsolforslag, autoudfyldningsfunktioner og den slags i vores udviklingsliv. Hvis du laver et konsolprogram, bør du overveje at tilføje det, så dine brugere ikke bliver forvirrede over, hvordan de skal bruge din CLI-løsning på lavt niveau. PHP Symfony Console kan også levere det, out of the box, ved hjælp af AfslutningInput klasse.

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

Print hvor du vil

​
Symfony 5.1 introducerede en ny måde at håndtere markørens position på i CLI-programmer. Siden da har det været muligt at læse og skrive på et bestemt sted på skærmen ved hjælp af den praktiske 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;
    }

billede
Denne korte liste over tricks er kun toppen af isbjerget. Mulighederne for Symfony-konsollen er uendelige, som det fremgår af de mange projekter som Psalm, PHPStan eller Composer, der er baseret på PHP og bruges af millioner af PHP-udviklere rundt omkring i verden.

Samarbejdsbanner

Relaterede artikler

Udvikling af software

To grunde til, at du ikke bør bruge PHP

Som PHP-udvikler husker jeg stadig dagene med PHP4, den første (valgfri!) GC-implementering i PHP5, og jeg oplevede _hype_ om fremkomsten af PHP7 og...

Codest
Sebastian Luczak PHP Enhedsleder
Udvikling af software

Ansættelse af interne vs. eksterne udviklere

Ansætte internt eller eksternt? Det er et ultimativt dilemma! Find ud af fordelene ved at outsource eller opbygge et in-house team i den følgende artikel.

Codest
Grzegorz Rozmus Leder af Java-enhed

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

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

    Polen - Lokale teknologiske knudepunkter

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

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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