Kaksi syytä, miksi sinun ei pitäisi käyttää PHP:tä.
PHP-kehittäjänä muistan yhä PHP4:n päivät, ensimmäisen (valinnaisen!) GC-toteutuksen PHP5:ssä, ja elin PHP7:n ja PHP7:n tulon _hype_:n läpi....
Tämä artikkeli on luotu tarkoituksena näyttää sinulle hyödyllisimmät ja hyödyllisimmät vinkit ja niksit Symfony-konsolin kehitykseen liittyen.
Jos olet PHP kehittäjä joka haluaa tuoda PHP ohjelmistokehitys seuraavalle tasolle, tämä artikkeli on sinua varten. Pidemmittä puheitta mennään asiaan.
Usein kuulee:
PHP:tä käytetään vain verkkosivujen tekemiseen.
Tämä ei pidä paikkaansa, koska nykyään - PHP-kehitys käytetään monilla eri liiketoiminta-alueilla, jotka eivät useinkaan ole ensi näkemältä niin triviaaleja.
Sekä PHP kieli ja sen ympäristö tukevat täydellisesti HTTP-viestintää, mikä yhdessä CLI-ympäristön käytön kanssa mahdollistaa nopean webbottien, web-matkailijoiden tai työkalujen luomisen, jotka synkronoivat tietoja ulkoisissa ympäristöissä.
Tämän tueksi minulla on joitakin tilastoja, jotka osoittavat, että konsolikomponentti konsolin Symfony-kehys, joka mahdollistaa helpon pääsyn komentoriville, on TOP5 käytetyimpien ja ladatuimpien komentorivien joukossa. Symfony kaikkien aikojen paketteja.
Tässä vaiheessa haluaisimme jakaa kanssasi muutamia niksejä, joita jokainen PHP-kehittäjä pitäisi tietää kirjoittaessaan koodi osoitteessa PHP jonka pitäisi toimia CLI:ssä.
Taulukon renderöinti, josta voi valita merkintöjä, voidaan toteuttaa helposti käyttämällä seuraavaa toimintoa Symfony Komento:
// src/App/Command/TestCommand.php
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Esimerkki interaktiivisesta valintataulukosta");
$table = $io->createTable();
$table->setHeaderTitle("Esimerkki interaktiivisesta valintataulukosta");
$table->setRows(iterator_to_array($this->tagsTableRows()));
$table->render();
$io->newLine();
return Command::SUCCESS;
}
Yllä olevassa esimerkissä hyödynnämme PHP Generaattorit tietolähteenä - mikä auttaa skaalautuvuudessa tulevaisuudessa. Yksinkertainen datageneraattori edellä mainittua esimerkkiä varten:
protected function tagsTableRows(): Generator
{
$apiTagsResponse = $this->someInjectedService->getTags();
foreach ($apiTagsResponse as $apiTagResponse) {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
}
}
Lopputuloksena on CLI:ssä esitetty taulukko.
Jotta siitä tulisi vuorovaikutteinen, meidän on käytettävä QuestionHelperiä, joka tarjotaan kääreenä ympäröivän SymfonyStyle
tuotos.
(...)
$choice = new ChoiceQuestion(
kysymys: "Minkä valinnan valitset?",
choices: array_reduce(
array: $rows,
callback: function($carry, $item) {
$carry[] = $item[0];
return $carry;
}
)
);
$answer = $io->askQuestion($choice);
(...)
Tuloksena saamme interaktiivisen valintakentän ja taulukkonäytön samasta lähteestä.
Kehotteiden piilottaminen ja samalla arkaluonteisten tietojen antaminen on yleinen käytäntö, ja se on myös helposti toteutettavissa seuraavissa tapauksissa Symfony Konsoli.
Voit käyttää sisäänrakennettua kääreen SymfonyStyle
luokkaa seuraavan esimerkin avulla:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Arkaluonteisten tietojen pyytäminen käyttäjältä");
$io->askHidden(
question: "Anna API-avaimesi tässä",
validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
);
return Command::SUCCESS;
}
Käyttäjälle voidaan kertoa edistymisestä käyttämällä edistymispalkkeja. Symfony Konsoli on loistava tapa näyttää edistyminen käyttäjälle, mutta muista aina tyylitellä edistymisulosteet oikein. Voit hallita täysin eri osia ja niiden esittämistapaa käyttämällä seuraavia tapoja Muotoilija
. Edistymispalkin muoto on vain merkkijono erilaisia sijoitussalpaajia. Käytettävissä olevat sijoittimet ovat: nykyinen
, max
, baari
, prosenttia
, kulunut
, jäljelle jäävä
, arvioitu
, muisti
ja viesti
. Kokeile niitä alla olevan esimerkin avulla.
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Styled progress bar example");
$progressBar = new ProgressBar($io, 10000);
$progressBar->setFormat('<comment>%current%/%max% [%bar%] %percent:3s%%</comment>
<info>%elapsed:6s%/%estimated:-6s%</info> <error>%memory:6s%</error>');
$progressBar->start();
for ($i = 0; $i < 10000; $i++) {
$progressBar->advance();
usleep(420);
}
$progressBar->finish();
$io->newLine();
return Command::SUCCESS;
}
Voit käyttää muotoilijana melkein mitä tahansa, kunhan päätelaitteesi pystyy näyttämään sen. Virallinen Symfony dokumentaatio
Olemme tottuneet konsoli-ehdotuksiin, automaattisiin täydennysominaisuuksiin ja vastaaviin kehitystyössämme. Jos luot konsolisovellusta, sinun pitäisi harkita sen lisäämistä, jotta käyttäjät eivät joutuisi hämmennyksiin siitä, miten käyttää matalan tason CLI-ratkaisuasi. PHP Symfony Console voi tarjota myös sen, suoraan laatikosta, käyttämällä CompletionInput
luokka.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']);
}
}
Symfony 5.1 esitteli uuden tavan käsitellä kursorin sijaintia CLI-sovelluksissa. Siitä lähtien on ollut mahdollista lukea ja kirjoittaa tietyssä paikassa näytöllä käyttämällä kätevää Kursori
luokka:
(...)
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;
}
Tämä lyhyt luettelo tempuista on vain jäävuoren huippu. Mahdollisuudet Symfony-konsoli ovat loputtomia, kuten lukuisat projektit, kuten Psalm, PHPStan tai Composer, jotka pohjautuvat Psalmiin. PHP ja jota käyttävät miljoonat PHP-kehittäjät ympäri maailmaa.