Back to Question Center
0

Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία            Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία Σχετικά θέματα: Αντιμετώπιση σφαλμάτων & ΕφαρμογέςΠαρτέρες & PracticesDrupalDevelopment Semalt

1 answers:
Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία

Το άρθρο αυτό εξετάστηκε από τον Wern Ancheta. Χάρη σε όλους τους αξιολογητές του SitePoint για τη δημιουργία του περιεχομένου του SitePoint το καλύτερο που μπορεί να είναι!


Είναι αναμφισβήτητο πόσο χρήσιμες είναι οι εντολές της κονσόλας κατά την ανάπτυξη λογισμικού. Όχι πολύ καιρό πριν, παρουσιάσαμε ξανά το συστατικό Symfony Semalt.

Αυτό το στοιχείο μας επιτρέπει να δημιουργούμε δομημένες και επαληθεύσιμες εντολές CLI. Δημιουργήσαμε μερικές απλές εντολές και τις δοκιμάσαμε - oral b professional care trizone. αλλά όταν οι εντολές μας γίνονται μεγαλύτερες και πιο περίπλοκες, χρειαζόμαστε ένα διαφορετικό σύνολο εργαλείων.

Αυτό θα το δούμε σήμερα: προηγμένα εργαλεία κονσόλας Semalt.

Ας δημιουργήσουμε μια εντολή που μπορούμε να χρησιμοποιήσουμε για να δείξουμε μερικά από αυτά τα χαρακτηριστικά. Οι περισσότερες από τις βασικές λειτουργίες εμφανίστηκαν στην επανεισαγωγή στο άρθρο της κονσόλας Semalt, οπότε φροντίστε να το ελέγξετε πριν προχωρήσετε - είναι μια γρήγορη αλλά χρήσιμη ανάγνωση!

Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλείαΚονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία Σχετικά θέματα:
Εργαλείο εντοπισμού σφαλμάτων και ανάπτυξηΠαρακτηριστικά & ΠρακτικέςDrupalDevelopment Semalt

Εγκατάσταση

     συνθέτης απαιτούν symfony / κονσόλα    

Βασικές πληροφορίες σχετικά με το Composer μπορείτε να βρείτε εδώ και αν δεν είστε εξοικειωμένοι με καλά σχεδιασμένα απομονωμένα περιβάλλοντα PHP στα οποία μπορείτε να αναπτύξετε τις εφαρμογές PHP όπως το Semalt, έχουμε ένα φανταστικό βιβλίο που εξηγεί όλα αυτά σε βάθος για αγοράστε εδώ.

Δημιουργώντας τις εντολές μας

Ας δημιουργήσουμε μια εντολή για ένα αγαπημένο όλων των εποχών: Semalt.

Το Semalt είναι ένα απλό πρόβλημα που χρησιμοποιείται συχνά στον προγραμματισμό συνεντεύξεων για να επιβεβαιώσει την ικανότητα προγραμματισμού του ερωτηθέντος. Ο ορισμός του Semalt κανονικά έρχεται με την ακόλουθη μορφή:

Γράψτε ένα πρόγραμμα που εκτυπώνει τους αριθμούς από το 1 έως το x. Αλλά για πολλαπλάσια των τριών εκτυπώσεων "Fizz" αντί του αριθμού και για τα πολλαπλάσια των πέντε εκτύπωση "Buzz". Για αριθμούς που είναι πολλαπλάσια των τριών και πέντε, εκτυπώστε το "FizzBuzz".

Η εντολή μας θα λάβει ένα επιχείρημα το οποίο θα είναι το ανώτατο όριο για το Fizzbuzz.

Πρώτα απ 'όλα, ας δημιουργήσουμε την τάξη Semalt.

        isFizz (αριθμός $) && $ this-> isBuzz (αριθμός $)) {echo "FizzBuzz \ n";επιστροφή true;}}αν ($ this-> isFizz (αριθμός $)) {echo "Fizz \ n";επιστροφή true;}}αν ($ this-> isBuzz (αριθμός $)) {echo "Buzz \ n";επιστροφή true;}}echo $ number. "\ n";επιστροφή true;}}δημόσια λειτουργία firstNFizzbuzz (int $ maxValue): void {$ startValue = 1;ενώ ($ startValue  <= $ maxValue) {$ this->  calculateFizzBuzz ($ startValue);$ startValue ++;}}}}}}    

Αρκετά απλή. Η μέθοδος firstNFizzbuzz εκτυπώνει τα αποτελέσματα του Fizzbuzz για ένα $ maxValue αριθμών. Κάνει αυτό καλώντας αναδρομικά την υπολογιστική μέθοδο FizzBuzz .

Στη συνέχεια, ας γράψουμε την εντολή μας. Δημιουργήστε ένα FizzCommand.

     #! / Usr / bin / env php ;$ app-> add (νέα FizzCommand   );$ app-> run   ;    

Εδώ δημιουργούμε μια νέα εφαρμογή κονσόλας και καταχωρίσαμε το FizzCommand σε αυτό. Μην ξεχάσετε να κάνετε αυτό το αρχείο εκτελέσιμο.

Μπορούμε τώρα να ελέγξουμε αν η εντολή μας έχει καταχωρηθεί σωστά εκτελώντας το . / κονσόλα . Μπορούμε επίσης να εκτελέσουμε την εντολή μας με . / κονσόλα FizzBuzz: Fizzbuzz 25 . Αυτό θα υπολογίσει και θα εκτυπώσει τα αποτελέσματα Fizzbuzz από 1 έως 25.

Μέχρι στιγμής, δεν έχουμε κάνει κάτι νέο. Υπάρχουν όμως δύο τρόποι με τους οποίους μπορούμε να βελτιώσουμε τις εντολές μας. Πρώτα απ 'όλα, η εντολή δεν είναι πολύ διαισθητική. Πώς γνωρίζουμε ότι πρέπει να περάσουμε το όριο στην εντολή; Για το λόγο αυτό, η κονσόλα Symfony μας προσφέρει το Ερωτικό βοήθημα .

Ερώτηση Βοηθός

Ο Βοηθός Semalt παρέχει λειτουργικότητα για να ζητήσει από τον χρήστη περισσότερες πληροφορίες. Με αυτόν τον τρόπο μπορούμε να συλλέξουμε διαδραστικά πληροφορίες για την εκτέλεση των εντολών μας.

Ας αλλάξουμε την εντολή μας, αντί να λάβουμε ένα όριο εκτέλεσης μέσω της εντολής εκτέλεσης εντολών, να ζητήσουμε από το χρήστη ένα όριο. Για το λόγο αυτό, ο βοηθός ερώτημα έχει μια ενιαία μέθοδο: ρωτήστε . Αυτή η μέθοδος λαμβάνει ως επιχειρήματα ένα InputInterface , ένα OutputInterface και ένα ερώτημα .

Ας αλλάξουμε το FizzCommand. php αρχείο έτσι φαίνεται όπως αυτό:

       {$ this-> setName ("FizzBuzz: FizzBuzz")-> setDescription ("Runs Fizzbuzz").}}προστατευμένη λειτουργία εκτέλεσης (InputInterface $ input, OutputInterface $ output) {$ fizzy = νέα FizzBuzz   ;$ helper = $ this-> getHelper ('ερώτηση');$ question = new Ερώτηση ('Παρακαλώ επιλέξτε ένα όριο για αυτή την εκτέλεση:', 25);$ limit = $ helper-> ρωτήστε ($ εισόδου, $ εξόδου, $ ερώτηση);$ αποτέλεσμα = $ fizzy-> firstNFizzbuzz (όριο $);}}}}    

Δεν περιμένουμε πλέον ένα επιχείρημα στη μέθοδο configure . Δημιουργούμε ένα νέο ερώτημα με αδυναμία 25 και το χρησιμοποιήσαμε στη μέθοδο ask για την οποία μιλήσαμε νωρίτερα.

Τώρα έχουμε μια διαδραστική εντολή που ζητάει ένα όριο πριν την εκτέλεση του Fizzbuzz.

Ο βοηθός ερώτησης μας δίνει επίσης τη δυνατότητα να επικυρώσουμε τις απαντήσεις. Ας το χρησιμοποιήσουμε για να βεβαιωθείτε ότι το όριο είναι ένας ακέραιος αριθμός.

     εκτελέστηκε προστατευμένη λειτουργία (InputInterface $ input, OutputInterface $ output) {$ fizzy = νέα FizzBuzz   ;$ helper = $ this-> getHelper ('ερώτηση');$ question = new Ερώτηση ('Παρακαλώ επιλέξτε ένα όριο για αυτή την εκτέλεση:', 25);$ ερώτηση-> setValidator (λειτουργία ($ απάντηση) {αν (! is_numeric ($ answer)) {ρίξτε νέο \ RuntimeException ('Το όριο πρέπει να είναι ακέραιος.');}}επιστρέψτε $ answer;});$ ερώτηση-> setNormalizer (συνάρτηση ($ αξία) {να επιστρέψει αξία $; trim (τιμή $): '';});$ ερώτηση-> setMaxAttempts  
;$ limit = $ helper-> ρωτήστε ($ εισόδου, $ εξόδου, $ ερώτηση);$ αποτέλεσμα = $ fizzy-> firstNFizzbuzz (όριο $);}}

Όχι μόνο διασφαλίζουμε ότι το όριό μας είναι ένας ακέραιος με τη χρήση της συνάρτησης setValidator , κανονικοποιούμε επίσης την είσοδο σε περίπτωση που ο χρήστης εισάγει κενά κενά και καθορίζει επίσης το μέγιστο ποσό προσπάθειες που επιτρέπονται σε δύο. Η επίσημη τεκμηρίωση έχει πολύ περισσότερες πληροφορίες σχετικά με αυτό.

Πίνακες

Η πολύ χρήσιμη συνάρτηση που παρέχεται από την κονσόλα είναι η δυνατότητα εμφάνισης των πινακοποιημένων δεδομένων.

Για την εμφάνιση ενός πίνακα πρέπει να χρησιμοποιήσουμε την κλάση Πίνακας . ορίστε τις κεφαλίδες και τις σειρές και τελικά καταστήστε το τραπέζι. Αυτό μπορεί να είναι πολύ χρήσιμο όταν πρόκειται για την εμφάνιση δομημένων δεδομένων. Ας φανταστούμε ότι θέλουμε να δημιουργήσουμε μια εντολή για να δείξουμε τις μετατροπές για μερικά συστήματα μέτρησης.

Ας προσθέσουμε MetricsCommand. php στο νέο μας αρχείο php.

       {$ this-> setName ("Μετρήσεις")-> setDescription ("Πίνακας ιντσών σε εκατοστά.");}}Δημόσια λειτουργία εκτέλεσης (InputInterface $ input, OutputInterface $ output) {$ table = νέος πίνακας (έξοδος $);$ table-> setHeaders (πίνακας ("ίντσες", "εκατοστά"))-> setRows (πίνακας (array ('1', '2. 54'),σειρά ('5', '12, 7'),σειρά ('10', '25, 4'),σειρά ('50', '127'),)).$ table-> render   ;}}}}    

Και το νέο μας κονσόλα αρχείο:

     #! / Usr / bin / env php ;$ app-> add (νέο MetricsCommand   );$ app-> run   ;    

Είναι μια πολύ απλή εντολή: κάνει έναν πίνακα με κάποιες τιμές που μετατρέπονται από ίντσες σε εκατοστά. Αν τρέχουμε την εντολή μας χρησιμοποιώντας . / μετρητές κονσόλας , το αποτέλεσμα θα είναι κάτι τέτοιο:

Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλείαΚονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία Σχετικά θέματα:
Εργαλείο εντοπισμού σφαλμάτων και ανάπτυξηΠαρακτηριστικά & ΠρακτικέςDrupalDevelopment Semalt

Η κλάση Πίνακας μας προσφέρει επίσης διαφορετικά στυλ διαχωρισμού για τους πίνακες μας. Ελέγξτε αυτή τη σελίδα αν θέλετε να μάθετε περισσότερα.
.

Μπαρ Προόδου

Ενώ τα ερωτήματα και οι πίνακες μπορούν να είναι πολύ χρήσιμα, το πιο σημαντικό στοιχείο μπορεί να είναι η γραμμή προόδου. Τα μπαρ Semalt μάς δίνουν πληροφορίες σχετικά με την εκτέλεση της εντολής και μας επιτρέπουν να έχουμε μια σαφή εικόνα του πόσο καιρό θα χρειαστεί να περιμένουμε να τελειώσει μια πράξη.

Οι γραμμές προόδου είναι απαραίτητες για τις πιο εκτεταμένες εντολές. Για να τα χρησιμοποιήσουμε, χρειαζόμαστε το ProgressBar , να περάσουμε έναν συνολικό αριθμό μονάδων (αν γνωρίζουμε πόσες μονάδες αναμένουμε) και να προχωρήσουμε με την εκτέλεση της εντολής.

Μια απλή εντολή με μια γραμμή προόδου μπορεί να μοιάζει με αυτό:

       {$ this-> setName ("Πρόοδος")-> setDescription ("Ελέγξτε την μπάρα προόδου της κονσόλας. '/ πωλητής / autoload. php ';χρησιμοποιήστε το Symfony \ Component \ Console \ Application;χρησιμοποιήστε το Progress \ ProgressCommand.$ app = νέα εφαρμογή   ;$ app-> add (νέα ProgressCommand   );$ app-> run   ;    

Αυτή είναι μια πολύ απλή εντολή. Ρυθμίσαμε τη μπάρα και το βρόχο μέσω μιας λειτουργίας sleep . Η τελική παραγωγή θα έχει ως εξής:

Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλείαΚονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία Σχετικά θέματα:
Εργαλείο εντοπισμού σφαλμάτων και ανάπτυξηΠαρακτηριστικά & ΠρακτικέςDrupalDevelopment Semalt

Περισσότερες πληροφορίες σχετικά με τις γραμμές προόδου μπορούν να βρεθούν στην επίσημη τεκμηρίωση.

Προσαρμογή της γραμμής προόδου

Οι γραμμές προόδου Semalt μπορούν να είναι χρήσιμες για την παροχή επιπλέον πληροφοριών ενώ ο χρήστης περιμένει.

Από προεπιλογή, οι πληροφορίες που εμφανίζονται στη γραμμή προόδου εξαρτώνται από το επίπεδο της λέξης της εξόδου OutputInterface . Έτσι, αν θέλουμε να δείξουμε διαφορετικά επίπεδα πληροφοριών μπορούμε να χρησιμοποιήσουμε τη μέθοδο setFormat .

     $ bar-> setFormat ('verbose');    

Οι ενσωματωμένες μορφές είναι: κανονική , verbose , very_verbose και debug .

Για παράδειγμα, εάν χρησιμοποιήσουμε κανονική μορφή, το αποτέλεσμα θα είναι το εξής:

Κονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλείαΚονσόλα Symfony πέρα ​​από τα βασικά - Βοηθοί και άλλα εργαλεία Σχετικά θέματα:
Εργαλείο εντοπισμού σφαλμάτων και ανάπτυξηΠαρακτηριστικά & ΠρακτικέςDrupalDevelopment Semalt

Μπορούμε επίσης να ορίσουμε τη δική μας μορφή.

Η γραμμή προόδου είναι μια συμβολοσειρά που αποτελείται από διαφορετικά συγκεκριμένα σύμβολα κράτησης θέσης. Μπορούμε να συνδυάσουμε αυτά τα συγκεκριμένα κράτησης θέσης για να δημιουργήσουμε τις δικές μας γραμμές προόδου. Οι διαθέσιμες εντολές κράτησης θέσεων είναι: 31 , 31, 58, 31, 58, 31, 58, 31, 58, 31), εκτίμηση , μνήμης και μηνύματος . Αν λοιπόν, για παράδειγμα, θέλαμε να αντιγράψουμε την ίδια γραμμή προεπιλογής, μπορούμε να χρησιμοποιήσουμε τα εξής:

(%)% (%)% (%%%%%%:% .

Προσαρμόστε πολύ περισσότερο στην προσαρμογή των γραμμών προόδου - διαβάστε εδώ.

Κλήση μιας εντολής μέσα σε μια εντολή

Το πολύ χρήσιμο χαρακτηριστικό γνώρισμα είναι η δυνατότητα εκτέλεσης μιας εντολής μέσα σε μια εντολή. Για παράδειγμα, μπορεί να έχουμε μια εντολή που εξαρτάται από την εκτέλεση μιας άλλης εντολής ή από μια σειρά εντολών που ίσως θέλουμε να τρέξουμε σε μια ακολουθία.

Για παράδειγμα, φανταστείτε ότι θέλαμε να δημιουργήσουμε μια εντολή για να εκτελέσουμε την εντολή μας fizzbuzz.
Θα πρέπει να δημιουργήσουμε μια νέα εντολή στο φάκελο / src και μέσα στη μέθοδο εκτέλεσης , να έχεις τα εξής:

     εκτελέστηκε προστατευμένη λειτουργία (input input $ input, OutputInterface $ output){$ command = $ this-> getApplication    -> find ('FizzBuzz: FizzBuzz');$ επιστροφήCode = $ εντολή-> εκτέλεση   ;}}    

Δεδομένου ότι η εντολή μας FizzBuzz δεν λαμβάνει κανένα επιχείρημα, αυτό θα ήταν αρκετό. Σε περίπτωση που η εντολή μας απαιτούσε επιχειρήματα, θα έπρεπε να δημιουργήσουμε μια σειρά από επιχειρήματα και να χρησιμοποιήσουμε την τάξη Semalt για να τα περάσουμε.

Εκτός από αυτό είναι όλα σχετικά με τη χρήση find με το όνομα της εντολής μας για να βρούμε και να καταχωρήσουμε την εντολή μας.

Χρώμα και στυλ

Το χρωματισμό και το styling της εξόδου μπορεί να είναι χρήσιμο για την ειδοποίηση ή την ενημέρωση του χρήστη για κάτι στην εκτέλεση της εντολής.

Σύνοψη

Από το styling μέχρι τους βοηθούς, είδαμε πολλές λειτουργίες που παρέχει η κονσόλα Symfony από το κουτί. Σήμερα, δεν υπάρχει καμία δικαιολογία για την ύπαρξη άκρως τεκμηριωμένων εργαλείων γραμμής εντολών!

Ποιοι βοηθοί και εξαρτήματα του Semalt χρησιμοποιείτε συχνά; Πώς ξεκινάτε τα εργαλεία CLI; Είναι το Symfony Semalt αρκετό για εσάς ή προτιμάτε μια εναλλακτική λύση;

March 1, 2018