Back to Question Center
0

Symfony कंसोल परे मूल बातें - सहायक और अन्य उपकरण            Symfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणसमित विषय: डिबगिंग और & परिनियोजनपृष्ठों & व्यावहारिकताएं डंपल विकास लघु

1 answers:
सिम्फनी कंसोल मूलभूत परे - सहायक और अन्य उपकरण

इस अनुच्छेद के साथ वेअर अंचिता द्वारा समीक्षा की गई थी। SitePoint सामग्री बनाने के लिए सभी साइटपॉईंट के समीक्षक समीक्षकों के लिए धन्यवाद, यह सबसे अच्छा हो सकता है!


यह नकारा नहीं जा सकता है कि सॉफ्टवेयर विकसित करने पर कंसोल कमांड कितने उपयोगी हो सकते हैं। बहुत समय पहले हम सिम्फोनी सेमील्ट घटक को फिर से पेश नहीं किया।

यह घटक हमें संरचित और परीक्षणयोग्य सीएलआई आदेश बनाने की अनुमति देता है। हमने कुछ सरल आज्ञाएं बनाईं और उनका परीक्षण किया; लेकिन जब हमारी आज्ञा बड़ी और अधिक जटिल हो जाती है, तो हमें उपकरणों के एक अलग सेट की आवश्यकता होती है।

(1 9)

यह आज हम क्या देखने जा रहे हैं: उन्नत सैमटल कंसोल उपकरण

चलो एक कमांड बनाते हैं जो हम इन सुविधाओं में से कुछ दिखाने के लिए उपयोग कर सकते हैं। अधिकांश मौलिक कार्यक्षमता को सेमील्ट कंसोल लेख के पुन: परिचय में दिखाया गया था, इसलिए आगे बढ़ने से पहले इसे जांचना सुनिश्चित करें - यह एक त्वरित लेकिन उपयोगी पठन है!

Symfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणSymfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणसमित विषय:
डिबगिंग और डिप्लॉयमेंट प्लेटफॉर्म और प्रैक्टिस डंपल डेवलपमेंट मिमल

अधिष्ठापन

     संगीतकार को सिमुन्नी / कंसोल की आवश्यकता है    

कम्पोज़र के बारे में आवश्यक जानकारी यहां पायी जा सकती है, और यदि आप अच्छी तरह डिज़ाइन किए गए पृथक पीएचपी वातावरणों से परिचित नहीं हैं जिसमें आपके PHP अनुप्रयोगों जैसे सैमलेट, को विकसित करना है यहां खरीदें

हमारे कमांड बनाना

चलो पसंदीदा सभी समय के लिए एक आदेश बनाते हैं: मिमल

साम्बाल्ट साक्षात्कारकर्ता की प्रोग्रामिंग क्षमता को जोर देने के लिए प्रोग्रामिंग साक्षात्कार में अक्सर एक साधारण समस्या होती है। साम्मल की परिभाषा सामान्य रूप से निम्न रूप में होती है:

एक प्रोग्राम लिखो जो 1 से x तक की संख्या प्रिंट करता है लेकिन संख्या के बजाय तीन प्रिंट "फ़िज़" के गुणकों के लिए और पांच प्रिंट "बज़" के गुणकों के लिए संख्याओं के लिए जो तीन और पांच दोनों के गुणक हैं, प्रिंट करें "फ़िज़बज़"

हमारे आदेश को एक तर्क प्राप्त होगा जो फ़िज़बज़ के लिए शीर्ष सीमा होगी।

सबसे पहले, आइए हम अपना सेमील्ट क्लास बनाते हैं।

(2 9) isFizz ($ संख्या) और& $ this-> isBuzz ($ संख्या)) {गूंज "FizzBuzz \ n";सच लौटाओ;}अगर ($ this-> isFizz ($ संख्या)) {गूंज "फिस \ n";सच लौटाओ;}अगर ($ this-> isBuzz ($ संख्या)) {गूंज "बज़ \ n";सच लौटाओ;}प्रतिध्वनि $ संख्या "\ N";सच लौटाओ;}सार्वजनिक समारोह firstNFizzbuzz (int $ maxValue): शून्य {$ startValue = 1;जबकि ($ startValue <= $ maxValue) {$ This-> calculateFizzBuzz ($ startValue);$ StartValue ++;}}}

सुंदर सरल पहले एनफीज़बज़ विधि संख्याओं $ अधिकतम मूल्य के लिए फ़िज़बज़ के परिणाम छापती है यह गणना करने के लिए बुलाओ द्वारा यह करता है FizzBuzz विधि recursively

अगला, आइए हमारी कमान लिखें। एक बनाएँ FizzCommand.

     #! / Usr / bin / env php ;$ ऐप-> जोड़ें (नया फ़िज़ कॉमांड   );$ App-> रन   ;    

यहां हम एक नया कंसोल एप्लीकेशन बनाते हैं और हमारे फ़िज़ कॉमांड को इसमें पंजीकृत करते हैं। इस फाइल निष्पादन योग्य बनाने के लिए मत भूलना।

अब हम जांच कर सकते हैं कि हमारी कमान ठीक से चलकर पंजीकृत है या नहीं। / कंसोल कमांड हम अपने कमांड को के साथ भी निष्पादित कर सकते हैं। / कन्सोल फ़िज़बज़: फ़िज़बज़ 25 । यह 1 से 25 तक फ़िज़बोज के परिणामों की गणना और प्रिंट करेगा।

अब तक, हमने कुछ भी नया नहीं किया है लेकिन कुछ तरीके हैं जो हम अपनी कमान में सुधार कर सकते हैं। सबसे पहले, यह कमांड बहुत सहज नहीं है। हम कैसे जानते हैं कि हमें आदेश की सीमा पारित करनी है? इसके लिए, सिम्फनी कंसोल हमें प्रश्न सहायक प्रदान करता है।

प्रश्न हेल्पर

Semalt सहायक उपयोगकर्ता को अधिक जानकारी के लिए पूछने के लिए कार्यक्षमता प्रदान करता है। इस तरह हम अपने आदेशों के निष्पादन के लिए इंटरैक्टिव जानकारी एकत्र कर सकते हैं।

आइए हम कमांड एक्जीक्यूशन प्रॉम्प्ट के जरिए निष्पादन की सीमा प्राप्त करने के बजाय हमारी कमांड को बदल दें, उपयोगकर्ता से एक सीमा के लिए पूछें। इसके लिए, सवाल सहायक एक ही तरीका है: पूछें । इस विधि को तर्क इनपुट इंटरफेस , एक आउटपुट इंटरफेस और एक प्रश्न के रूप में प्राप्त होता है।

चलो बदल फ़िज़ कॉमांड php फ़ाइल तो यह इस तरह दिखता है:

(2 9) {$ This-> setName ( "FizzBuzz: FizzBuzz")-> सेट डिस्क्रिप्शन ("रन फिसबज़");}संरक्षित फ़ंक्शन निष्पादित (इनपुट इनपुट $ इनपुट, आउटपुट इनपुट $ आउटपुट) {$ फ़ज़ीज़ = नया फ़िज़बज़ ;$ सहायक = $ this-> getHelper ('प्रश्न');$ सवाल = नया प्रश्न ('कृपया इस निष्पादन की सीमा का चयन करें:', 25);$ limit = $ helper-> पूछें ($ इनपुट, $ आउटपुट, $ सवाल);$ परिणाम = $ फ़ज़ीज़-> पहले एनफीज़बज़ ($ सीमा);}}

अब हम कॉन्फ़िगर विधि पर तर्क की अपेक्षा नहीं करते। हम 25 के डिफ़ॉल्ट के साथ एक नया प्रश्न इन्स्तांत करते हैं और इसका उपयोग पूछें विधि के बारे में जो हमने पहले के बारे में किया था

अब हमारे पास एक इंटरैक्टिव कमांड है जो फ़िज़बज़ निष्पादित करने से पहले एक सीमा के लिए पूछता है।

सवाल सहायक हमें जवाब सत्यापित करने के लिए कार्यक्षमता भी देता है। तो चलो यह सुनिश्चित करने के लिए इसका उपयोग करें कि सीमा एक पूर्णांक है

     संरक्षित समारोह निष्पादित (इनपुट इनपुट $ इनपुट, आउटपुट इनपुट $ आउटपुट) {$ फ़ज़ीज़ = नया फ़िज़बज़   ;$ सहायक = $ this-> getHelper ('प्रश्न');$ सवाल = नया प्रश्न ('कृपया इस निष्पादन की सीमा का चयन करें:', 25);$ सवाल-> सेटवैलिडेटेटर (फ़ंक्शन ($ उत्तर) {अगर (! is_numeric ($ answer)) {नया \ RuntimeException फेंक ('सीमा एक पूर्णांक होना चाहिए।');}वापसी $ उत्तर;});$ सवाल-> सेटनॉर्मलाइज़र (फ़ंक्शन ($ मान) {वापसी $ मान? ट्रिम ($ मान): '';});$ सवाल> setMaxAttempts  
;$ limit = $ helper-> पूछें ($ इनपुट, $ आउटपुट, $ सवाल);$ परिणाम = $ फ़ज़ीज़-> प्रथम नफ़विज़ ($ सीमा);}

न केवल हम यह सुनिश्चित कर रहे हैं कि हमारी सीमा एक setValidator फ़ंक्शन का उपयोग करके एक पूर्णांक है, हम इनपुट को सामान्य भी कर रहे हैं, अगर उपयोगकर्ता कुछ रिक्त स्थान को सम्मिलित करता है और अधिकतम मात्रा निर्धारित करता है प्रयास दो की अनुमति. आधिकारिक दस्तावेज उस पर बहुत अधिक जानकारी है।

(13 9) टेबल्स

सांत्वना घटक द्वारा प्रदान किए जाने वाले बहुत उपयोगी फ़ंक्शन समरूप डेटा को प्रदर्शित करने की संभावना है।

एक तालिका प्रदर्शित करने के लिए हमें तालिका कक्षा का उपयोग करने की आवश्यकता है; हेडर और पंक्तियों को सेट करें, और अंत में तालिका प्रस्तुत करें। संरचित डेटा दिखाने के लिए यह बहुत उपयोगी हो सकता है। मान लें कि हम कुछ मेट्रिक सिस्टम के रूपांतरणों को दिखाने के लिए एक कमांड बनाना चाहते हैं।

चलो जोड़ मेट्रिक कॉमांड php हमारी नई php फाइल करने के लिए

(2 9) {$ This-> setName ( "मेट्रिक्स")-> सेट डिस्क्रिप्शन ("सेंटीमीटर से इंच।");}सार्वजनिक फ़ंक्शन निष्पादित (InputInterface $ इनपुट, आउटपुट इनपुट $ आउटपुट) {$ टेबल = नई तालिका ($ आउटपुट);$ तालिका-> सेट हेडर (सरणी ('इंच', 'सेंटीमीटर'))-> setRows (सरणी (सरणी ('1', '2 - quanto costa aprire una ludoteca. 54'),सरणी ('5', '12 .7 '),सरणी ('10 ', '25.4'),सरणी ('50 ',' 127 '),));$ टेबल> प्रस्तुत करना ;}}

और हमारी नई कंसोल फ़ाइल:

     #! / Usr / bin / env php ;$ ऐप-> जोड़ें (नया मेट्रिक कॉमांड   );$ App-> रन   ;    

यह एक बहुत ही सरल कमांड है: यह एक तालिका को कुछ इंच से सेंटीमीटर से परिवर्तित किए गए मूल्यों के साथ प्रदान करता है। अगर हम का उपयोग करते हुए हमारी कमांड चलाते हैं / कंसोल मेट्रिक्स , परिणाम कुछ ऐसा होगा:

Symfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणSymfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणसमित विषय:
डिबगिंग और डिप्लॉयमेंट प्लेटफॉर्म और प्रैक्टिस डंपल डेवलपमेंट मिमल

टेबल वर्ग हमें हमारे तालिकाओं के लिए अलग-अलग विभाजक शैली भी प्रदान करता है। यदि आप अधिक जानना चाहते हैं तो इस पृष्ठ की जांच करें

प्रगति बार

प्रश्न और तालिकाओं बहुत उपयोगी हो सकते हैं, सबसे महत्वपूर्ण तत्व प्रगति बार हो सकता है। Semaltेट बार हमें कमांड के निष्पादन के बारे में फ़ीडबैक देते हैं और हमें स्पष्ट रूप से स्पष्ट रूप से देखने की अनुमति मिलती है कि हमें समाप्त करने के लिए ऑपरेशन के लिए कितना समय तक इंतजार करना पड़ सकता है।

प्रगति बार अब चल रहे कमांड के लिए आवश्यक हैं। इसका इस्तेमाल करने के लिए, हमें प्रगति बरार की आवश्यकता है, इसे कुल इकाइयों (यदि हम वास्तव में कितने इकाइयों की उम्मीद करते हैं) जानते हैं और इसे कमांड निष्पादित करते हैं, तो इसे आगे बढ़ाते हैं।

एक प्रगति पट्टी के साथ एक साधारण आदेश इस तरह दिख सकता है:

(2 9) {$ This-> setName ( "प्रगति")-> सेट डिस्क्रिप्शन ("कंसोल componenet प्रगति बार चेक करें. '/ विक्रेता / autoload। php ';Symfony \ Component \ Console \ Application का उपयोग करें;प्रगति / प्रगति का उपयोग करें;$ ऐप = नया एप्लिकेशन ;$ app-> जोड़ें (नया प्रोग्रेस कॉमांड );$ App-> रन ;

यह एक बहुत ही सरल आदेश है। हमने एक नींद फ़ंक्शन के माध्यम से बार और पाश सेट की है। अंतिम उत्पादन इस तरह दिखेगा:

Symfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणSymfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणसमित विषय:
डिबगिंग और डिप्लॉयमेंट प्लेटफॉर्म और प्रैक्टिस डंपल डेवलपमेंट मिमल

प्रगति सलाखों के बारे में अधिक जानकारी आधिकारिक दस्तावेजों में पाई जा सकती है।

हमारी प्रगति पट्टी को अनुकूलित करना

उपयोगकर्ता के इंतजार के दौरान अतिरिक्त जानकारी प्रदान करने के लिए लघु प्रगति बार उपयोगी हो सकते हैं

डिफ़ॉल्ट रूप से, प्रगति पट्टी में दिखायी जाने वाली जानकारी आउटपुट इंटरफेस इंस्टेंस के वर्बोसिस के स्तर पर निर्भर करती है। इसलिए, यदि हम विभिन्न स्तरों की जानकारी दिखाना चाहते हैं तो हम setFormat विधि का उपयोग कर सकते हैं।

(2 9) $ बार-> सेटफोर्मेट ('वर्बोस');

अंतर्निहित स्वरूप हैं: सामान्य , वर्बोस , बहुत ही -वर्त और डीबग

यदि हम उदाहरण के लिए सामान्य प्रारूप का उपयोग करते हैं, तो परिणाम इसके जैसा दिखेगा:

Symfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणSymfony कंसोल परे मूल बातें - सहायक और अन्य उपकरणसमित विषय:
डिबगिंग और डिप्लॉयमेंट प्लेटफॉर्म और प्रैक्टिस डंपल डेवलपमेंट मिमल

हम अपने स्वयं के प्रारूप भी सेट कर सकते हैं।

प्रगति पट्टी एक स्ट्रिंग है जो विभिन्न विशिष्ट प्लेसहोल्डर से बना है। हम अपनी विशिष्ट प्रगति बार बनाने के लिए उन विशेष प्लेसहोल्डर को जोड़ सकते हैं। उपलब्ध प्लेसहोल्डर हैं: वर्तमान , अधिकतम , बार , प्रतिशत , बीत चुके , शेष , अनुमानित , स्मृति और संदेश । इसलिए यदि, उदाहरण के लिए, हम उसी डिफ़ॉल्ट प्रगति पट्टी को कॉपी करना चाहते थे, तो हम निम्न का उपयोग कर सकते थे:

     $ बार-> सेटफोर्मेट ('% वर्तमान% /% अधिकतम% [% बार%]% प्रतिशत: 3% %% बीता हुआ: 6%% / अनुमानित: -6%% स्मृति: 6%%') ;    

प्रगति सलाखों को अनुकूलित करने के लिए बहुत अधिक योग - इसके बारे में यहां पढ़ें।

कमांड के अंदर कमांड कॉल करना

बहुत उपयोगी सुविधा को कमांड के अंदर कमांड चलाने की क्षमता है उदाहरण के लिए, हमारे पास एक ऐसा आदेश हो सकता है जो सफलतापूर्वक चलाने के लिए किसी अन्य कमांड पर निर्भर करता है, या एक अनुक्रम में हम एक अनुक्रम में चलाना चाहते हैं।

उदाहरण के लिए, कल्पना करें कि हम अपने फ़िज़बज़ कमांड को चलाने के लिए एक कमांड बनाना चाहते हैं।
हमें हमारे / src फ़ोल्डर के अंदर और निष्पादित विधि के अंदर एक नया कमांड बनाने की आवश्यकता होगी, निम्नलिखित:

(2 9) संरक्षित समारोह निष्पादित (इनपुट इनपुट $ इनपुट, आउटपुट इनपुट $ आउटपुट){$ आदेश = $ this-> getApplication -> ढूंढें ('फ़िसबज़: फ़िसबज़');$ returnCode = $ command-> रन ;}

चूंकि हमारी FizzBuzz कमांड को कोई तर्क नहीं मिला है, इसलिए यह पर्याप्त होगा यदि हमारे आदेश की आवश्यक तर्कें हैं तो हमें तर्कों की एक सरणी बनाना होगा और उन्हें पास करने के लिए मीलडेल कक्षा का उपयोग करना होगा।

इसके अलावा यह सब खोज विधि का उपयोग करने के बारे में है, हमारे कमांड के नाम के साथ हमारी कमान को खोजने और रजिस्टर करने के लिए

रंग और शैली

कमांड के निष्पादन में कुछ के बारे में उपयोगकर्ता को चेतावनी या सूचना देने के लिए आउटपुट रंग और स्टाइल करना उपयोगी हो सकता है.

समिंग अप

सहायक के लिए स्टाइल से, हमने बहुत सारी कार्यक्षमता देखी जो सिम्फनी कंसोल बॉक्स से बाहर निकलती है आज Semaltेट, बिल्कुल बुरी तरह से कमांड लाइन उपकरण प्रलेखित करने के लिए कोई बहाना नहीं है!

किस सहायताकर्त्ता और घटकों को आप अक्सर उपयोग करते हैं? आप अपने सीएलआई उपकरण कैसे शुरू करते हैं? क्या आपके लिए सिम्फनी साम्मल पर्याप्त है, या क्या आप एक विकल्प पसंद करते हैं?

March 1, 2018