Δύο λόγοι για τους οποίους δεν πρέπει να χρησιμοποιήσετε το PHP
Ως προγραμματιστής του PHP θυμάμαι ακόμα τις μέρες του PHP4, την πρώτη (προαιρετική!) υλοποίηση GC στο PHP5, και έζησα την _υπερπαραγωγή_ της έλευσης του PHP7 και...

Αυτό το άρθρο δημιουργήθηκε με σκοπό να σας δείξει τις πιο χρήσιμες και ανακτήσιμες συμβουλές και κόλπα σχετικά με την ανάπτυξη της κονσόλας Symfony.
Εάν είστε PHP προγραμματιστής που θέλει να φέρει το PHP ανάπτυξη λογισμικού στο επόμενο επίπεδο, αυτό το άρθρο είναι για εσάς. Χωρίς άλλη καθυστέρηση, ας μπούμε στο ψητό.
Ακούς συχνά:
Το PHP χρησιμοποιείται μόνο για τη δημιουργία ιστοσελίδων
Αυτό είναι εντελώς αναληθές, διότι στις μέρες μας Ανάπτυξη PHP χρησιμοποιείται σε πολλούς διαφορετικούς επιχειρηματικούς τομείς, συχνά όχι τόσο ασήμαντους με την πρώτη ματιά.
Τόσο η PHP γλώσσα και το περιβάλλον της υποστηρίζουν τέλεια την επικοινωνία HTTP, η οποία, σε συνδυασμό με τη χρήση του περιβάλλοντος CLI, καθιστά δυνατή τη γρήγορη δημιουργία web bots, web crawlers ή εργαλείων που συγχρονίζουν δεδομένα σε εξωτερικά περιβάλλοντα.
Για να το υποστηρίξω αυτό έχω κάποια στατιστικά στοιχεία που δείχνουν ότι το στοιχείο Console του Πλαίσιο Symfony, το οποίο επιτρέπει την εύκολη πρόσβαση στη γραμμή εντολών, είναι στο TOP5 των πιο συχνά χρησιμοποιούμενων και κατεβασμένων Symfony πακέτα όλων των εποχών.
Σε αυτό το σημείο, θα θέλαμε να μοιραστούμε μαζί σας μερικά κόλπα που κάθε PHP προγραμματιστής πρέπει να γνωρίζουν όταν γράφουν κωδικός στο PHP που υποτίθεται ότι λειτουργεί στο CLI.
Η απόδοση πίνακα με τη δυνατότητα επιλογής καταχωρήσεων από μπορεί να επιτευχθεί με εύκολο τρόπο χρησιμοποιώντας Symfony Εντολή:
// src/App/Command/TestCommand.php
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output),
$io->title("Παράδειγμα διαδραστικού πίνακα επιλογής"),
$table = $io->createTable(),
$table->setHeaderTitle("Παράδειγμα διαδραστικού πίνακα επιλογής"),
$table->setRows(iterator_to_array($this->tagsTableRows())),
$table->render(),
$io->newLine(),
return Command::SUCCESS,
}
Στο παραπάνω παράδειγμα εκμεταλλευόμαστε το πλεονέκτημα της Γεννήτριες PHP ως πηγή δεδομένων - γεγονός που βοηθά στην επεκτασιμότητα στο μέλλον. Απλή γεννήτρια δεδομένων για το παραπάνω παράδειγμα:
protected function tagsTableRows(): Γεννήτρια
{
$apiTagsResponse = $this->someInjectedService->getTags(),
foreach ($apiTagsResponse as $apiTagResponse) {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ],
}
}
Το τελικό αποτέλεσμα είναι ένας Πίνακας που απεικονίζεται στο CLI.
Για να το κάνουμε διαδραστικό πρέπει να χρησιμοποιήσουμε το QuestionHelper, που παρέχεται ως περιτύλιγμα γύρω από το SymfonyStyle
παραγωγή.
(...)
$choice = new ChoiceQuestion(
question: "Ποια επιλογή επιλέγετε;",
choices: array_reduce(
array: $rows,
callback: function($carry, $item) {
$carry[] = $item[0],
return $carry,
}
)
);
$answer = $io->askQuestion($choice),
(...)
Ως αποτέλεσμα, έχουμε ένα διαδραστικό πεδίο επιλογής με εμφάνιση πίνακα από την ίδια πηγή.
Η απόκρυψη της προτροπής ενώ παρέχει ευαίσθητα δεδομένα είναι μια κοινή πρακτική και είναι επίσης εύκολα εφικτή σε Symfony Κονσόλα.
Μπορείτε να χρησιμοποιήσετε το ενσωματωμένο περιτύλιγμα στο SymfonyStyle
με το ακόλουθο παράδειγμα:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output),
$io->title("Ζητώντας από τον χρήστη ευαίσθητα δεδομένα"),
$io->askHidden(
question: "Provide your API key here",
validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
);
return Command::SUCCESS,
}
Για να επικοινωνήσουμε κάποια πρόοδο στο χρήστη μπορούμε να χρησιμοποιήσουμε τις μπάρες προόδου. Symfony Η κονσόλα διαθέτει έναν εξαιρετικό τρόπο για να εμφανίσετε την πρόοδο στο χρήστη, αλλά να θυμάστε πάντα να διαμορφώνετε σωστά το στυλ της εξόδου προόδου. Μπορείτε να έχετε τον πλήρη έλεγχο των διαφόρων τμημάτων και του τρόπου με τον οποίο απεικονίζονται χρησιμοποιώντας Μορφοποιητής
. Η μορφή της γραμμής προόδου είναι απλώς μια σειρά από διαφορετικά εικονίδια. Τα διαθέσιμα εικονίδια είναι: τρέχουσα
, max
, μπαρ
, τοις εκατό
, που παρήλθε
, υπόλοιπο
, εκτιμώμενη
, μνήμη
και μήνυμα
. Προσπαθήστε να τα τροποποιήσετε με το παρακάτω παράδειγμα.
(...)
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('%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,
}
Μπορείτε να χρησιμοποιήσετε σχεδόν οτιδήποτε ως μορφοποιητή, αρκεί το τερματικό σας να μπορεί να το εμφανίσει. Επίσημο Symfony τεκμηρίωση
Είμαστε συνηθισμένοι σε προτάσεις κονσόλας, λειτουργίες αυτόματης συμπλήρωσης και άλλα παρόμοια στη ζωή μας στην ανάπτυξη. Αν δημιουργείτε εφαρμογή κονσόλας, θα πρέπει να εξετάσετε το ενδεχόμενο να την προσθέσετε, ώστε οι χρήστες σας να μην μπερδεύονται σχετικά με το πώς να χρησιμοποιούν τη λύση CLI χαμηλού επιπέδου. PHP Το Symfony Console μπορεί να το παρέχει και αυτό, out of the box, χρησιμοποιώντας CompletionInput
κατηγορία.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']),
}
}
Symfony 5.1 εισήγαγε έναν νέο τρόπο χειρισμού της θέσης του δρομέα σε εφαρμογές CLI. Από τότε είναι δυνατό να διαβάζετε και να γράφετε σε ένα συγκεκριμένο σημείο της οθόνης χρησιμοποιώντας εύχρηστο Δρομέας
κατηγορία:
(...)
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;
}
Αυτός ο σύντομος κατάλογος με τα κόλπα είναι μόνο η κορυφή του παγόβουνου. Οι δυνατότητες των Κονσόλα Symfony είναι ατελείωτες, όπως αποδεικνύεται από τα πολυάριθμα έργα όπως το Psalm, το PHPStan ή το Composer που βασίζονται σε PHP και χρησιμοποιείται από εκατομμύρια PHP προγραμματιστές σε όλο τον κόσμο.