Tvær ástæður fyrir því að þú ættir ekki að nota PHP
Sem PHP-þróunaraðili man ég enn eftir dögum PHP4, fyrstu (valkvæðu!) GC-innleiðingunni í PHP5, og ég lifði í gegnum _hype_ um komu PHP7 og...
Þessi grein var búin til með það að markmiði að sýna þér gagnlegustu og áhrifaríkustu ráðin og brellurnar varðandi Symfony Console-þróun.
Hér er tómt.Ef þú ert PHP þróunaraðili sem vill færa þitt PHP hugbúnaðarþróun Ef þú vilt lyfta þessu á næsta stig, þá er þessi grein fyrir þig. Án frekari ummæla skulum við koma beint að kjarna málsins.
Þú heyrir oft:
PHP er eingöngu notað til að gera vefur síður
Þetta er algjörlega ósatt vegna þess að nú á dögum PHP þróun er notað í mörgum mismunandi viðskiptasviðum, oft ekki svo einfalt við fyrstu sýn.
Bæði PHP málið og umhverfi þess styðja fullkomlega HTTP-samskipti sem, ásamt notkun CLI-umhverfisins, gera það mögulegt að búa fljótt til vefvélmenni, vefskriðdýr eða verkfæri sem samstill gögn í ytri umhverfi.
Til að styðja þetta hef ég nokkrar tölfræði sem sýna að Console-hlutinn af Symfony-ramminn, sem gerir auðveldan aðgang að skipanalínunni, er meðal fimm mest notaðra og sóttustu Symfony pökkum allra tíma.

Á þessum tímapunkti viljum við deila með þér nokkrum brellum sem hver PHP þróunaraðili Ætti að vita þegar skrifað er kóði í PHP sem á að virka í CLI.

Búið er að gera það auðvelt að birta töflu sem gerir kleift að velja færslur úr henni með því að nota Symfony Skipun:
// src/App/Command/TestCommand.php
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Dæmi um gagnvirkt valborð");
$table = $io->createTable();
$table->setHeaderTitle("Dæmi um gagnvirkt valborð");
$table->setRows(iterator_to_array($this->tagsTableRows()));
$table->render();
$io->newLine();
return Command::SUCCESS;
}
Í dæminu hér að ofan nýtum við okkur PHP rafalar sem gagnaheimild – sem hjálpar við Stigstærð í framtíðinni. Einfaldur gagnagerðartæki fyrir dæmið hér að ofan:
vernduð aðferð tagsTableRows(): Generator
{
$apiTagsResponse = $this->someInjectedService->getTags();
foreach ($apiTagsResponse as $apiTagResponse) {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
}
}
Niðurstaðan er tafla sem er birt í CLI.

Til að gera það gagnvirkt þurfum við að nota QuestionHelper, sem er veitt sem umbúð utan um Symfonystíll Úttak.
(...)
$choice = new ChoiceQuestion(
question: 'Hvaða val velur þú?',
choices: array_reduce(
array: $rows,
callback: function($carry, $item) {
$carry[] = $item[0];
return $carry;
}
)
);
$answer = $io->askQuestion($choice);
(...)
Í kjölfarið fáum við gagnvirkt valreiti með töflusýningu úr sama uppruna.

Að fela inntakstexta á meðan viðkvæmar upplýsingar eru veittar er algeng framkvæmd og það er líka auðvelt að framkvæma í Symfony Rofi.
Þú getur notað innbyggðan umbúð í Symfonystíll flokk með eftirfarandi dæmi:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Að biðja notanda um viðkvæm gögn");
$io->askHidden(
question: "Gefðu upp þitt forritaskil "lykill hér",
validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
);
return Command::SUCCESS;
}

Til að miðla einhverjum framförum til notandans getum við notað framvindulínur. Symfony Console hefur frábæran hátt til að sýna framvindu fyrir notandann, en mundu alltaf að stíla framvindusýninguna þína rétt. Þú getur haft fulla stjórn á mismunandi þáttum og hvernig þeir eru birtir með því að nota Formateri. Framvindulínusniðið er bara strengur af mismunandi staðfyllingum. Hægt er að nota eftirfarandi staðfyllingar: núverandi, hámark, bar, prósenta, liðið, eftir, áætlaður, minni og skilaboð. Leiktu þér með þau með dæminu hér að neðan.
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Dæmi um stílhreint framvinduspil");
$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;
}
Þú getur notað nánast hvað sem er sem formata, svo framarlega sem skel þín getur sýnt það. Opinbert Symfony Skjalagerð

Við erum vön tillögum í konsólunni, sjálfvirkri fullkomnunareiginleikum og slíku í þróunarferlinu okkar. Ef þú ert að búa til konsólaforrit ættir þú að íhuga að bæta við slíkum eiginleikum svo notendur þínir ruglist ekki yfir því hvernig á að nota lausnina þína á lágstigs CLI. PHP Symfony Console getur einnig veitt það beint úr kassanum með því að nota Innsláttur til að ljúka flokkur.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']);
}
}
Symfony 5.1 Kynnti nýjan hátt til að meðhöndla bendilinn í CLI-forritum. Frá þeim tíma hefur verið hægt að lesa og skrifa á tilteknum stað á skjánum með hentugum Vísir flokkur:
(...)
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;
}

Þessi stutta listi yfir brellur er aðeins brot af heildinni. Möguleikar á Symfony Console eru endalausir, eins og sjá má af fjölmörgum verkefnum eins og Psalm, PHPStan eða Composer sem byggja á PHP og notað af milljónum PHP forritarar um allan heim.
