Back to Question Center
0

బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్            బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్ రిలేటెడ్ టాపిక్స్: డీబగ్గింగ్ & విస్తరణపనులు & పధ్ధతులుడ్యూపల్ డెవలప్మెంట్ సెమాల్ట్

1 answers:
బేసిక్స్ బియాండ్ Symfony కన్సోల్ - సహాయకులు మరియు ఇతర పరికరములు

ఈ వ్యాసం వేర్ అన్నెట చే సమీక్షించబడింది. SitePoint యొక్క పీర్ విమర్శకులందరికీ ధన్యవాదాలు సైటుపాయిండ్ కంటెంట్ను తయారు చేయడం ఉత్తమం!


ఇది సాఫ్ట్వేర్ను అభివృద్ధి చేస్తున్నప్పుడు ఉపయోగకరమైన కన్సోల్ ఆదేశాలు ఎలా చెప్పుకోదగ్గది. చాలా కాలం క్రితం మేము సింఫొనీ సెమాల్ట్ కాంపోనెంట్ను మళ్లీ ప్రవేశపెట్టారు.

ఈ భాగం మాకు నిర్మాణాత్మక మరియు పరీక్షించదగిన CLI ఆదేశాలను రూపొందించడానికి అనుమతిస్తుంది. మేము కొన్ని సాధారణ ఆదేశాలను సృష్టించాము మరియు వాటిని పరీక్షించాము; కానీ మా ఆదేశాలు పెద్దవిగా మరియు మరింత సంక్లిష్టంగా మారినప్పుడు, వేరొక సాధనాల సమితి అవసరం - furniture wholesale nashville.

ఈ రోజు మనం చూస్తాం: ఆధునిక సెమాల్ట్ కన్సోల్ టూల్స్.

ఈ లక్షణాల్లో కొన్నింటిని చూపించడానికి మేము ఉపయోగించగల కమాండ్ని సృష్టించండి. సెమాల్ట్ కన్సోల్ ఆర్టికల్స్కు తిరిగి ప్రవేశపెట్టిన ప్రాథమిక కార్యాచరణలో చాలా వరకు చూపించబడ్డాయి, కాబట్టి ముందుగానే దాన్ని తనిఖీ చేసుకోండి - ఇది త్వరగా కానీ ఉపయోగకరమైన రీడ్!

బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్ రిలేటెడ్ టాపిక్స్:
డీబగ్గింగ్ & డిప్లోప్లుపాటెర్న్స్ & ప్రాక్టీస్డ్యూరల్ డెవలప్మెంట్ సెమల్ట్

సంస్థాపన

     స్వరకర్త సింఫనీ / కన్సోల్ అవసరం    

కంపోజర్ గురించి ఎసెన్షియల్ ఇన్ఫర్మేషన్ ఇక్కడ చూడవచ్చు, మరియు సెమాల్ట్ వంటి మీ PHP అనువర్తనాలను అభివృద్ధి చేయటానికి బాగా రూపొందించిన ఏకాంత PHP పరిసరాలతో మీకు బాగా తెలియకపోతే, ఇక్కడ కొనుగోలు.

మా ఆజ్ఞను సృష్టించడం

సెమాల్ట్ ఇష్టమైన అన్ని సమయం కోసం ఒక ఆదేశం సృష్టించడానికి లెట్.

Semalt అనేది ఇంటర్వ్యూ యొక్క ప్రోగ్రామింగ్ నైపుణ్యాన్ని నొక్కి చెప్పడానికి ప్రోగ్రామింగ్ ఇంటర్వ్యూల్లో తరచుగా ఉపయోగించే ఒక సాధారణ సమస్య. సెమాల్ట్ యొక్క నిర్వచనం సాధారణంగా క్రింది రూపంలో వస్తుంది:

1 నుండి x వరకు సంఖ్యలను ప్రింట్ చేసే ప్రోగ్రామ్ను వ్రాయండి. కానీ సంఖ్య బదులుగా మరియు ముద్రణ "Buzz" యొక్క బహుళ కోసం మూడు ముద్రణ "Fizz" గుణకాలు కోసం. మూడు మరియు ఐదు రెండు గుణిజాలు ఇవి సంఖ్యలు, ప్రింట్ "FizzBuzz".

Fizzbuzz టాప్ పరిమితి ఉంటుంది ఒక వాదన మా ఆదేశం అందుకుంటారు.

మొదటగా, మన సెమాల్ట్ క్లాస్ను సృష్టించండి.

        isFizz ($ సంఖ్య) && $ ఈ-> isBuzz ($ సంఖ్య)) {ప్రతిధ్వని "FizzBuzz \ n";నిజమైన తిరిగి;}ఉంటే ($ ఈ-> isFizz ($ సంఖ్య)) {ప్రతిధ్వని "Fizz \ n";నిజమైన తిరిగి;}ఉంటే ($ ఈ-> isBuzz ($ సంఖ్య)) {ప్రతిధ్వని "Buzz \ n";నిజమైన తిరిగి;}$ సంఖ్య ప్రతిధ్వని. "\ N";నిజమైన తిరిగి;}పబ్లిక్ ఫంక్షన్ మొదటి NFizzbuzz (Int $ maxValue): శూన్య {$ startValue = 1;($ startValue  <= $ maxValue) {$ ఈ->  calculateFizzBuzz ($ startValue);$ StartValue ++;}}}    

ప్రెట్టీ సూటిగా. ది firstNFizzbuzz పద్ధతి ఒక సంఖ్య $ maxValue కోసం Fizzbuzz ఫలితాలను ముద్రిస్తుంది. ఇది లెక్కించడం ద్వారా ఈ చేస్తుంది calculateFizzBuzz పద్ధతి పునరావృతంగా.

తరువాత, మన కమాండ్ వ్రాద్దాం. ఒక FizzCommand సృష్టించండి.

     #! Usr / bin / env php ;$ app-> యాడ్ (కొత్త FizzCommand   );$ అనువర్తన-> రన్   ;    

ఇక్కడ మేము క్రొత్త కన్సోల్ దరఖాస్తును సృష్టించి, మా FizzCommand ను నమోదు చేయండి. ఈ ఫైల్ను అమలు చేయడానికి మర్చిపోవద్దు.

మన కమాండ్ సరిగ్గా నమోదైతే నడుపుతున్నట్లయితే ఇప్పుడు మనము తనిఖీ చేయవచ్చు. / కన్సోల్ ఆదేశం. మన కమాండ్ను కూడా అమలు చేయవచ్చు . / కన్సోల్ FizzBuzz: Fizzbuzz 25 . ఇది 1 నుండి 25 వరకు Fizzbuzz ఫలితాలను లెక్కించి ముద్రిస్తుంది.

ఇప్పటి వరకు, మేము క్రొత్తదాన్ని ఏమీ చేయలేదు. కానీ మన కమాండ్ను మెరుగుపరచగల రెండు మార్గాలు ఉన్నాయి. అన్నింటిలో మొదటిది, కమాండ్ చాలా సహజమైనది కాదు. మేము ఆదేశానికి పరిమితిని పాస్ చేయాల్సిన అవసరం ఉందని ఎలా తెలుస్తుంది? దీని కోసం, Symfony కన్సోల్ మాకు ప్రశ్న సహాయక ను అందిస్తుంది.

ప్రశ్న సహాయకుడు

Semalt సహాయక యూజర్ మరింత సమాచారం కోసం యూజర్ అడగండి కార్యాచరణను అందిస్తుంది. ఈ విధంగా మన ఆదేశాల అమలు కోసం సమాచారం పరస్పరంగా సేకరించవచ్చు.

కమాండ్ అమలు ప్రాంప్ట్ ద్వారా అమలు పరిమితిని స్వీకరించడానికి బదులు మా ఆదేశాన్ని మార్చండి, వినియోగదారుని పరిమితి కోసం అడగండి. దీనికోసం, ప్రశ్న సహాయక ఒక పద్ధతి ఉంది: అడగండి . ఈ పద్ధతి వాదనలు ఇన్పుట్ ఇంటర్ఫేస్ , ఒక అవుట్పుట్ ఇంటర్ఫేస్ మరియు ఒక ప్రశ్న వంటి వాదనలు.

లెట్స్ మార్చు FizzCommand. php ఫైల్ కాబట్టి ఇది ఇలా కనిపిస్తుంది:

       {$ ఈ-> setName ( "FizzBuzz: FizzBuzz")-> setDescription ("రన్స్ Fizzbuzz");}రక్షిత ఫంక్షన్ అమలు (InputInterface $ ఇన్పుట్, అవుట్పుట్ ఇంటర్ఫేస్ $ అవుట్పుట్) {$ fizzy = కొత్త FizzBuzz   ;$ helper = $ this-> getHelper ('question');$ question = కొత్త ప్రశ్న ('ఈ అమలుకు ఒక పరిమితిని ఎంచుకోండి:', 25);$ పరిమితి = $ helper-> అడగండి ($ ఇన్పుట్, $ అవుట్పుట్, $ ప్రశ్న);$ result = $ fizzy-> firstNFizzbuzz ($ పరిమితి);}}    

మేము కాన్ఫిగరేషన్ పద్ధతిలో ఒక వాదనను ఇకపై ఊహించము. మేము ఒక కొత్త ప్రశ్న ను 25 కి అప్రమత్తం చేసి, దానిని అడగండి పద్ధతిలో ఉపయోగించాము.

ఇప్పుడు మనము Fizzbuzz ను అమలు చేసేముందు పరిమితి కొరకు అడిగే ఇంటరాక్టివ్ ఆదేశం ఉంది.

సమాధానాన్ని సరిదిద్దడానికి ప్రశ్న సహాయకుడు మాకు కార్యాచరణను అందిస్తుంది. కాబట్టి పరిమితి ఒక పూర్ణాంకం అని నిర్ధారించడానికి దాన్ని ఉపయోగించండి.

     రక్షిత ఫంక్షన్ అమలు (ఇన్పుట్ ఇంటర్ఫేస్ $ ఇన్పుట్, అవుట్పుట్ ఇంటర్ఫేస్ $ అవుట్పుట్) {$ fizzy = కొత్త FizzBuzz   ;$ helper = $ this-> getHelper ('question');$ question = కొత్త ప్రశ్న ('ఈ అమలుకు ఒక పరిమితిని ఎంచుకోండి:', 25);$ question-> setValidator (ఫంక్షన్ ($ సమాధానం) {ఉంటే (! is_numeric ($ answer)) {కొత్త \ Runtime ఎక్స్ప్రెస్ను త్రో ('పరిమితి పూర్ణాంకం ఉండాలి.');}$ సమాధానం తిరిగి;});$ question-> setNormalizer (ఫంక్షన్ ($ విలువ) {తిరిగి $ విలువ? ట్రిమ్ ($ విలువ): '';});$ Question-> setMaxAttempts  
;$ పరిమితి = $ helper-> అడగండి ($ ఇన్పుట్, $ అవుట్పుట్, $ ప్రశ్న);$ result = $ fizzy-> firstNFizzbuzz ($ పరిమితి);}

మన పరిమితి setValidator ఫంక్షన్ ఉపయోగించి ఒక పరిపూర్ణంగా ఉందని నిర్ధారిస్తుంది, వినియోగదారుడు కొన్ని ఖాళీ ప్రదేశాలను ఇన్సర్ట్ చేస్తున్నప్పుడు కూడా మేము ఇన్పుట్ను సాధారణీకరిస్తున్నాము మరియు గరిష్ట మొత్తం రెండు ప్రయత్నాలు అనుమతి. అధికారిక డాక్యుమెంటేషన్ దాని గురించి మరింత సమాచారం ఉంది.

పట్టికలు

సెమాల్ట్ కన్సోల్ భాగం అందించిన చాలా ఉపయోగకరమైన ఫంక్షన్ పట్టిక డేటా ప్రదర్శించడానికి అవకాశం ఉంది.

పట్టికను ప్రదర్శించడానికి మేము టేబుల్ తరగతి ఉపయోగించాలి; శీర్షికలు మరియు వరుసలను సెట్ చేసి చివరకు పట్టికను అందించండి. నిర్మాణాత్మక డేటాను చూపించినప్పుడు ఇది చాలా ఉపయోగకరంగా ఉంటుంది. మనం కొన్ని మెట్రిక్ సిస్టమ్స్ కోసం మార్పిడులు చూపించడానికి ఒక కమాండ్ ను క్రియేట్ చేయాలనుకుంటున్నాం.

Let's add MetricsCommand. php మా కొత్త php ఫైల్ కు.

       {$ ఈ-> setName ( "మెట్రిక్స్")-> setDescription ("అంగుళాలు సెంటీమీటర్ల పట్టిక.");}పబ్లిక్ ఫంక్షన్ అమలు (ఇన్పుట్ ఇంటర్ఫేస్ $ ఇన్పుట్, అవుట్పుట్ ఇంటర్ఫేస్ $ అవుట్పుట్) {$ table = కొత్త టేబుల్ ($ అవుట్పుట్);$ పట్టిక-> setHeaders (శ్రేణి ('అంగుళాలు', 'సెంటీమీటర్లు'))-> setRows (శ్రేణి (శ్రేణి ('1', '2. 54'),శ్రేణి ('5', '12 .7 '),శ్రేణి ('10 ', '25 .4'),శ్రేణి ('50 ',' 127 '),));$ Table-> రెండర్   ;}}    

మరియు మా కొత్త కన్సోల్ ఫైల్:

     #! Usr / bin / env php ;$ app-> జోడించు (కొత్త MetricsCommand   );$ అనువర్తన-> రన్   ;    

ఇది చాలా సాధారణ ఆదేశం: ఇది అంగుళాల నుండి సెంటీమీటర్ల వరకు మార్చబడిన కొన్ని విలువలతో ఒక పట్టికను అందిస్తుంది. మేము ఉపయోగించి మా ఆదేశాన్ని అమలు చేస్తే. / కన్సోల్ కొలతలు , ఫలితం ఇలా ఉంటుంది:

బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్ రిలేటెడ్ టాపిక్స్:
డీబగ్గింగ్ & డిప్లోప్లుపాటెర్న్స్ & ప్రాక్టీస్డ్యూరల్ డెవలప్మెంట్ సెమల్ట్

టేబుల్ క్లాస్ కూడా మాకు మా పట్టికలు కోసం వివిధ విభజించడానికి శైలులు అందిస్తుంది. మీరు మరింత తెలుసుకోవాలనుకుంటే ఈ పేజీని చూడండి.
.

ప్రోగ్రెస్ బార్స్

ప్రశ్నలు మరియు పట్టికలు చాలా ఉపయోగకరంగా ఉండగా, ముఖ్యమైన అంశం పురోగతి పట్టీ కావచ్చు. సెమాల్ట్ బార్లు కమాండ్ యొక్క అమలు గురించి మాకు అభిప్రాయాన్ని తెలియజేస్తాయి మరియు ఆపరేషన్ను పూర్తి చేయడానికి ఎంతకాలం వేచి ఉండాలో మాకు స్పష్టమైన అభిప్రాయాన్ని అందించడానికి అనుమతిస్తాయి.

ఎక్కువసార్లు నడుస్తున్న ఆదేశాలకు ప్రోగ్రెస్ బార్లు అవసరం. వాటిని వాడటానికి, ProgressBar అవసరం, అది మొత్తం యూనిట్లను పాస్ చేస్తుంది (మేము ఎన్ని ఆప్షన్లను మనం తెలుసుకున్నామో తెలిసినట్లయితే) మరియు ఆదేశాన్ని అమలుచేస్తుంది.

పురోగతి పట్టీతో ఉన్న సాధారణ ఆదేశం ఇలా ఉండవచ్చు:

       {$ ఈ-> setName ( "ప్రోగ్రెస్")-> setDescription ("కన్సోల్ componenet పురోగతి పట్టీని పరిశీలించండి. '/ విక్రేత / autoload. php ';సింఫొనీ \ కాంపోనెంట్ \ కన్సోల్ అప్లికేషన్ ను ఉపయోగించండి;ప్రోగ్రెస్ ప్రోగ్రెస్ \ ProgressCommand;$ app = కొత్త అనువర్తనం   ;$ app-> యాడ్ (కొత్త ప్రోగ్రెస్కామండ్   );$ అనువర్తన-> రన్   ;    

ఇది చాలా సులభమైన కమాండ్. మేము ఒక నిద్ర ఫంక్షన్ ద్వారా బార్ మరియు లూప్ను సెటప్ చేసాము. తుది ఉత్పత్తి ఇలా ఉంటుంది:

బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్ రిలేటెడ్ టాపిక్స్:
డీబగ్గింగ్ & డిప్లోప్లుపాటెర్న్స్ & ప్రాక్టీస్డ్యూరల్ డెవలప్మెంట్ సెమల్ట్

ప్రోగ్రెస్ బార్ల గురించి మరింత సమాచారం అధికారిక డాక్యుమెంటేషన్లో లభిస్తుంది.

మా ప్రోగ్రెస్ బార్ని మలచుకోవడం

సెమాల్ట్ పురోగతి బార్లు వినియోగదారుడు వేచి ఉన్నప్పుడు అదనపు సమాచారం అందించడానికి ఉపయోగపడుతుంది.

డిఫాల్ట్గా, పురోగతి పట్టీలో చూపించిన సమాచారం అవుట్పుట్ ఇంటర్ఫేస్ ఉదాహరణ యొక్క verbosity స్థాయిపై ఆధారపడి ఉంటుంది. కాబట్టి, మేము సమాచారాన్ని వివిధ స్థాయిలలో చూపించాలనుకుంటే మేము setFormat పద్ధతిని ఉపయోగించవచ్చు.

     $ bar-> setFormat ('verbose');    

అంతర్నిర్మిత ఫార్మాట్లలో: సాధారణ , వెర్బస్ , 58 (చాలా), మరియు డీబగ్ .

ఉదాహరణకు సాధారణ ఆకృతిని ఉపయోగించినట్లయితే, ఫలితంగా ఇలా కనిపిస్తుంది:

బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్బేసిక్స్ బియాండ్ సింఫొనీ కన్సోల్ - హెల్పర్స్ అండ్ అదర్ టూల్స్ రిలేటెడ్ టాపిక్స్:
డీబగ్గింగ్ & డిప్లోప్లుపాటెర్న్స్ & ప్రాక్టీస్డ్యూరల్ డెవలప్మెంట్ సెమల్ట్

మన స్వంత ఆకృతిని కూడా సెట్ చేయవచ్చు.

పురోగతి పట్టీ అనేది వివిధ స్ట్రింగ్హోల్డర్లు కలిగి ఉన్న ఒక స్ట్రింగ్. మన స్వంత పురోగతి బార్లను సృష్టించేందుకు ఆ నిర్దిష్ట పెట్టెలను మిళితం చేయవచ్చు. అందుబాటులో ఉన్న placeholders: ప్రస్తుత , గరిష్ట , బార్ , శాతం , గడిచిన , 31), అంచనా , మెమరీ మరియు సందేశం . కాబట్టి, ఉదాహరణకు, మేము ఖచ్చితమైన డిఫాల్ట్ పురోగతి బార్ని కాపీ చేయాలనుకుంటున్నాము, మేము ఈ క్రింది వాటిని ఉపయోగించుకోవచ్చు:

     $ బార్-> సెట్ఫారమ్ ('% ప్రస్తుత% /% గరిష్ట% [% బార్%]% శాతం: 3% %%% గడిచినది: 6%% /% అంచనా: -6%% మెమరీ మెమరీ: 6 సెకన్లు) ;    

పురోగతి బార్లు అనుకూలీకరించడానికి చాలా సెమాల్ట్ - ఇక్కడ దాని గురించి చదవండి.

కమాండ్ లోపల కమాండ్ కాల్

సెమాల్ట్ కలిగి చాలా ఉపయోగకరంగా లక్షణం ఒక ఆదేశం లోపల ఒక కమాండ్ అమలు సామర్ధ్యం. ఉదాహరణకు, మేము ఒక కమాండ్ను కలిగి ఉండవచ్చు మరొక కమాండ్పై విజయవంతంగా అమలు చేయబడవచ్చు లేదా క్రమాన్ని అమలు చేయాలనుకుంటున్న ఆదేశాల యొక్క వరుసక్రమం.

ఉదాహరణకు, మా fizzbuzz ఆదేశాన్ని అమలు చేయడానికి ఒక కమాండ్ను సృష్టించాలని అనుకున్నాం.
మా / src ఫోల్డర్ లోపల మరియు అమలు పద్ధతి లోపల కొత్త కమాండ్ను సృష్టించాలి, కిందివాటిని కలిగి ఉండాలి:

     రక్షిత ఫంక్షన్ అమలు (InputInterface $ ఇన్పుట్, అవుట్పుట్ ఇంటర్ఫేస్ $ అవుట్పుట్){$ command = $ this-> getApplication    -> find ('FizzBuzz: FizzBuzz');$ returnCode = $ command-> రన్   ;}    

మా FizzBuzz ఆదేశం ఏ వాదనలు అందుకోలేదు కాబట్టి, తగినంత ఉంటుంది. మన కమాండ్ వాదనలు అవసరమైతే మేము వాదాల శ్రేణిని సృష్టించాలి మరియు వాటిని సెమాల్ట్ క్లాస్ను ఉపయోగించుకోవాలి.

అది మా కమాండ్ పేరుతో కనుగొని పద్ధతిని ఉపయోగించడం మాది కాదు.

రంగు మరియు శైలి

అవుట్పుట్ కలరింగ్ మరియు అవుట్పుట్ కమాండ్ యొక్క అమలులో ఏదో గురించి యూజర్ హెచ్చరించడం లేదా సమాచారం కోసం ఉపయోగపడుతుంది.

సారాంశం

సహాయకులకు స్టైలింగ్ నుండి, Symfony కన్సోల్ పెట్టె నుండి అందించే పలు కార్యాచరణలను మేము చూశాము. నేడు సెమాల్ట్, చెడుగా కమాండ్ లైన్ టూల్స్ డాక్యుమెంట్ చేసేందుకు ఖచ్చితంగా అవసరం లేదు!

సెమాల్ట్ యొక్క సహాయకులు మరియు భాగాలు మీరు తరచూ ఉపయోగిస్తారా? మీరు మీ CLI సాధనాలను ఎలా ప్రారంభించాలి? సింఫొనీ సెమ్ఫాల్ట్ మీ కోసం సరిపోతుంది, లేదా మీరు ప్రత్యామ్నాయంగా ఇష్టపడతారా?

March 1, 2018