Kaks põhjust, miks te ei peaks kasutama PHP
PHP arendajana mäletan veel PHP4 päevi, esimest (valikulist!) GC rakendamist PHP5-s, ja ma elasin läbi PHP7 tuleku _hüpe_ ja...

See artikkel on loodud eesmärgiga näidata teile kõige kasulikumaid ja kasulikke näpunäiteid ja nippe Symfony konsooli arendamise kohta.
Kui te olete PHP arendaja mis tahab tuua teie PHP tarkvaraarendus järgmisele tasemele, on see artikkel just teile. Ilma pikema jututa läheme asja juurde.
Sageli kuuleb:
PHP kasutatakse ainult veebilehtede tegemiseks.
See on täiesti vale, sest tänapäeval on PHP arendus kasutatakse paljudes erinevates ärivaldkondades, mis sageli ei olegi esmapilgul nii triviaalsed.
Nii PHP keel ja selle keskkond toetavad ideaalselt HTTP-suhtlust, mis koos CLI-keskkonna kasutamisega võimaldab kiiresti luua veebibootide, veebikülastajate või väliskeskkondades andmeid sünkroonivate tööriistade loomist.
Selle toetuseks on mul olemas mõned statistilised andmed, mis näitavad, et konsooli osa Symfony raamistik, mis võimaldab lihtsat juurdepääsu käsureale, on TOP5 enim kasutatud ja alla laaditud Symfony kõigi aegade paketid.
Siinkohal tahaksime jagada teiega mõned nipid, mida iga PHP arendaja peaks teadma kirjutamisel kood aadressil PHP mis peaks töötama CLI-s.
Tabeli renderdamine koos võimalusega valida kirjeid saab hõlpsasti saavutada, kasutades Symfony Käsk:
// src/App/Command/TestCommand.php
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Interaktiivse valiku tabeli näide");
$table = $io->createTable();
$table->setHeaderTitle("Interaktiivse valiku tabeli näide");
$table->setRows(iterator_to_array($this->tagsTableRows()));
$table->render();
$io->newLine();
return Command::SUCCESS;
}
Ülaltoodud näites kasutame ära PHP generaatorid andmeallikana - mis aitab tulevikus kaasa skaleeritavusele. Lihtne andmegeneraator ülaltoodud näite jaoks:
protected function tagsTableRows(): Generator
{
$apiTagsResponse = $this->someInjectedService->getTags();
foreach ($apiTagsResponse as $apiTagResponse) {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
}
}
Lõpptulemus on CLI-s esitatud tabel.
Et see oleks interaktiivne, peame kasutama QuestionHelper'i, mis on pakutud ümbritsevana ümber SymfonyStyle
väljund.
(...)
$choice = new ChoiceQuestion(
küsimus: "Millise valiku te valite?",
choices: array_reduce(
array: $rows,
callback: function($carry, $item) {
$carry[] = $item[0];
return $carry;
}
)
);
$answer = $io->askQuestion($choice);
(...)
Tulemusena saame interaktiivse valikuvälja koos tabelinäitusega samast allikast.
Kiiresti varjamine, pakkudes samal ajal tundlikke andmeid, on levinud praktika ja see on ka hõlpsasti saavutatav Symfony Konsool.
Saate kasutada sisseehitatud mähist SymfonyStyle
klassi järgmise näite abil:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Tundlike andmete küsimine kasutajalt");
$io->askHidden(
küsimus: "Andke oma API võti siia",
validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
);
return Command::SUCCESS;
}
Et teatada kasutajale mõningaid edusamme, võime kasutada progressibarone. Symfony Konsoolil on suurepärane võimalus kasutajale edusammude näitamiseks, kuid ärge unustage alati oma edusammude väljundi õiget stiili. Teil on täielik kontroll erinevate osade üle ja selle üle, kuidas neid renderdatakse, kasutades Formaator
. Progress bar formaat lihtsalt rida erinevaid paigutussalvestisi. Saadaval on järgmised paigutussalused: praegune
, max
, baar
, protsent
, möödunud
, ülejäänud
, hinnanguliselt
, mälu
ja sõnum
. Näpistage nendega alloleva näite abil.
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Stiliseeritud eduriba näide");
$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;
}
Te võite kasutada peaaegu kõike, mida iganes, kui teie terminal on võimeline seda kuvama. Ametlik Symfony dokumentatsioon
Me oleme oma arendusetapis harjunud konsooli soovituste, automaatse täitmise funktsioonide ja muu sellisega. Kui te loote konsoolirakendust, siis peaksite kaaluma selle lisamist, et teie kasutajad ei satuks segadusse, kuidas kasutada teie madalatasemelist CLI-lahendust. PHP Symfony Console suudab seda ka pakkuda, kasutades selleks CompletionInput
klass.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']);
}
}
Symfony 5.1 võttis kasutusele uue viisi kursori asukoha käsitlemiseks CLI-rakendustes. Sellest ajast alates on võimalik lugeda ja kirjutada konkreetses kohas ekraanil, kasutades mugavat Kursor
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;
}
See lühike trikkide nimekiri on vaid jäämäe tipp. Võimalused Symfony konsool on lõputud, nagu näitavad arvukad projektid nagu Psalm, PHPStan või Composer, mis põhinevad PHP ja mida kasutavad miljonid PHP arendajad üle maailma.