Back to Question Center
0

کنسول Symfony فراتر از مبانی - حامیان و سایر ابزارها            کنسول Symfony فراتر از مبانی - کمک کننده ها و ابزار های دیگر موضوع های مرتبط: اشکالزدایی و آمپر؛ DeploymentPatterns & ؛ PractedDrupalDevelopment Semalt

1 answers:
Symfony Console بیش از مبانی - کمک کننده ها و ابزارهای دیگر

این مقاله توسط Wern Ancheta بررسی شده است. با تشکر از تمامی متخصصان سایتPoint برای ایجاد محتوای SitePoint بهترین آن را می تواند باشد!


غیر قابل انکار است که چگونه دستورات کنسول مفید می تواند هنگام ایجاد نرم افزار باشد. نه چندان قبل ما مجددا Symfony Semalt را معرفی کردیم.

این جزء به ما اجازه می دهد دستورات CLI ساختار یافته و آزمایش پذیر را ایجاد کنیم. ما چند دستور ساده را ایجاد کردیم و آنها را آزمایش کردیم. اما زمانی که دستورات ما بزرگتر و پیچیده تر می شوند، ما به مجموعه ای متفاوت از ابزار نیاز داریم - estudio de fotos en casa.

این چیزی است که ما امروز به آن نگاه می کنیم: ابزارهای کنسول Semtal پیشرفته.

بیایید یک فرمان ایجاد کنیم که می توانیم برای نشان دادن برخی از این ویژگی ها استفاده کنیم. اکثر قابلیت های اولیه در معرفی مجدد به مقاله کنسول Semtal نشان داده شده است، بنابراین مطمئن شوید قبل از پیشرفت آن را چک کنید - این یک خواندن سریع و مفید است!

کنسول Symfony فراتر از مبانی - حامیان و سایر ابزارهاکنسول Symfony فراتر از مبانی - کمک کننده ها و ابزار های دیگر موضوع های مرتبط:
اشکال زدایی و DeploymentPatterns و PracticesDrupalDevelopment Semalt

نصب

     آهنگساز نیاز به سیمفونی / کنسول دارد    

اطلاعات ضروری در مورد آهنگساز را می توان در اینجا یافت، و اگر شما با محیط های PHP به خوبی طراحی شده است که در آن برای توسعه برنامه های PHP خود مانند Semalt، ما یک کتاب فوق العاده توضیح آن را در عمق در دسترس برای اینجا خرید

ایجاد فرمان ما

بیایید یک فرمان را برای تمام وقت مورد علاقه ایجاد کنیم: Semalt.

Semalt یک مشکل ساده است که اغلب در مصاحبه های برنامه نویسی برای تضمین صلاحیت برنامه نویسی مصاحبه شونده استفاده می شود. تعریف سمولت معمولا به صورت زیر می باشد:

برنامه ای را بنویسید که اعداد را از 1 تا x چاپ می کند. اما برای چندتایی از سه چاپ "Fizz" به جای تعداد و برای چند ضلعی از پنج چاپ "Buzz". برای شماره هایی که چند برابر سه و پنج هستند، "FizzBuzz" را چاپ کنید.

فرمان ما یک استدلال دریافت خواهد کرد که بالاترین حد برای Fizzbuzz خواهد بود.

اول از همه، اجازه دهید کلاس Semalt ما را ایجاد کنیم.

      <؟ phpاعلام (strict_types = 1)؛فضای نام FizzBuzz؛کلاس Fizzbuzz {تابع عمومی isFizz (int $ value): bool {اگر (ارزش $ 3 === 0) {بازگشت درست}بازگشت نادرست؛}تابع عمومی isBuzz (int $ value): bool {اگر (ارزش $ 5 === 0) {بازگشت درست}بازگشت نادرست؛}تابع عمومی calculateFizzBuzz (int $ number): bool {اگر ($ this->  isFizz ($ number) && $ this-> isBuzz ($ number)) {echo "FizzBuzz \ n"؛بازگشت درست}اگر ($ this-> isFizz ($ number)) {echo "Fizz \ n"؛بازگشت درست}اگر ($ this-> isBuzz ($ number)) {echo "Buzz \ n"؛بازگشت درست}echo $ تعداد "\ n"؛بازگشت درست}تابع عمومی firstNFizzbuzz (int $ maxValue): void {$ startValue = 1؛در حالی که ($ startValue  <= $ maxValue) {$ this->  calculateFizzBuzz ($ startValue)؛$ startValue ++؛}}}    

بسیار ساده است. روش firstNFizzbuzz نتایج Fizzbuzz را برای $ maxValue از اعداد چاپ می کند. این کار با فراخوانی مجدد calculateFizzBuzz انجام می شود.

بعدا، فرمان را بنویس. ایجاد یک FizzCommand .

     #! / usr / bin / env php<؟ phprequire_once __DIR__ '/ فروشنده / autoload. php '؛استفاده از Symfony \ Component \ Console \ Application؛استفاده از FizzBuzz \ FizzCommand؛$ app = برنامه جدید   ؛$ app-> add (جدید FizzCommand   )؛$ app-> run   ؛    

در اینجا یک برنامه Console جدید ایجاد میکنیم و FizzCommand را به آن وارد می کنیم. فراموش نکنید که فایل را اجرا کنید.

اکنون می توانیم با اجرای دستور ، فرمان ما درست ثبت شود. / console فرمان ما همچنین می توانیم فرمان ما را با اجرا کنیم. / کنسول FizzBuzz: Fizzbuzz 25 . این نتایج محاسبات و چاپ Fizzbuzz را از 1 تا 25 محاسبه می کند.

تا به امروز، ما هیچ کاری انجام نداده ایم. اما چند راه وجود دارد که می توان فرمان ما را بهبود بخشید. اول از همه، فرمان بسیار شهودی نیست. چگونه می توانیم بدانیم که باید حد مجاز را به فرمان منتقل کنیم؟ برای این، کنسول Symfony به ما کمک می کند Question helper .

پرسش کمک

Heltal Helper فراهم می کند تا کاربر را برای اطلاعات بیشتر بپرسد. به این ترتیب می توانیم به صورت تعاملی اطلاعاتی را برای اجرای دستورات ما جمع آوری کنیم.

بیایید فرمان ما را تغییر دهیم، به جای محدود کردن اعدام از طریق فرمان اعدام دستور، از کاربر برای محدود کردن درخواست کنید. برای این، مسوول سوال یک روش واحد دارد: ask . این روش به عنوان استدلال InputInterface ، OutputInterface و سوال دریافت می شود.

بیایید FizzCommand را تغییر دهیم. php فایل، بنابراین به نظر می رسد این است:

     <؟ phpفضای نام FizzBuzz؛استفاده از Symfony \ Component \ Console \ Command \ Command؛استفاده از Symfony \ Component \ Console \ Input \ InputInterface؛استفاده از Symfony \ Component \ Console \ Output \ OutputInterface؛استفاده از Symfony \ Component \ Console \ Input \ InputArgument؛استفاده از Symfony \ Component \ Console \ Question \ Question؛از FizzBuzz / Fizzbuzz استفاده کنیدکلاس FizzCommand فرمان {تابع حفاظت شده پیکربندی    {$ this-> setName ("FizzBuzz: FizzBuzz")-> setDescription ("اجرا Fizzbuzz")؛}اجرای تابع محافظت شده (ورودی InputInterface $، OutputInterface $ خروجی) {$ fizzy = new FizzBuzz   ؛$ helper = $ this-> getHelper ('سوال')؛$ question = سوال جدید ('لطفا یک محدودیت برای این اعدام انتخاب کنید:'، 25)؛$ limit = $ helper-> ask ($ input، $ output، $ question)؛$ result = $ fizzy-> firstNFizzbuzz ($ limit)؛}}    

ما دیگر انتظار بحث در روش configure نداریم. ما یک پرسش جدید (25) را با پیش فرض 25 (25) و با استفاده از آن در روش ask که ما در مورد آن صحبت کردیم استفاده می کنیم.

حالا ما یک فرمان تعاملی داریم که قبل از اجرای Fizzbuzz درخواست محدودیت می کند.

مسؤل مسؤول نیز به ما امکان می دهد که پاسخ ها را اعتبار دهیم. بنابراین اجازه دهید از آن استفاده کنیم تا اطمینان حاصل کنیم که حد یک عدد صحیح است.

     عملکرد محافظت شده محافظت شده (ورودی InputInterface $، OutputInterface $ خروجی) {$ fizzy = new FizzBuzz   ؛$ helper = $ this-> getHelper ('سوال')؛$ question = سوال جدید ('لطفا یک محدودیت برای این اعدام انتخاب کنید:'، 25)؛$ question-> setValidator (function ($ answer) {اگر (! is_numeric ($ answer)) {پرتاب جدید \ RuntimeException ('حد باید یک عدد صحیح باشد.')؛}بازگشت $ پاسخ؛})؛$ question-> setNormalizer (function (value value) {بازگشت ارزش دلار؟ ترخیص (ارزش دلار): ''؛})؛$ question-> setMaxAttempts  
؛$ limit = $ helper-> ask ($ input، $ output، $ question)؛$ result = $ fizzy-> firstNFizzbuzz ($ limit)؛}

نه تنها ما اطمینان می دهیم که محدودیت ما یک عدد صحیح با استفاده از تابع setValidator است، ما همچنین ورودی را درصورتی که کاربر برخی از فضاهای خالی را وارد کرده و همچنین حداکثر مقدار تلاش برای دو نفر مجاز است. مستندات رسمی اطلاعات زیادی در مورد آن دارند.

جداول

عملکرد بسیار مفید Semalt ارائه شده توسط جزء کنسول امکان نمایش داده های جدولی است.

برای نمایش جدول ما باید از کلاس جدول استفاده کنیم؛ هدر ها و ردیف ها را تنظیم کنید و در نهایت جدول را ترسیم کنید. این می تواند زمانی مفید باشد که داده های ساختاری را نشان دهد. بیایید تصور کنیم ما می خواهیم یک فرمان برای نشان دادن تبدیل برای برخی از سیستم های متریک ایجاد کنیم.

اجازه بدهید اضافه کنیم MetricsCommand. php به فایل جدید php ما.

     <؟ phpنام متریک؛استفاده از Symfony \ Component \ Console \ Command \ Command؛استفاده از Symfony \ Component \ Console \ Input \ InputInterface؛استفاده از Symfony \ Component \ Console \ Output \ OutputInterface؛استفاده از Symfony \ Component \ Console \ Input \ InputArgument؛استفاده از Symfony \ Component \ Console \ Helper \ Table؛کلاس MetricsCommand فرمان {تابع حفاظت شده پیکربندی    {$ this-> setName ("Metrics")-> setDescription ("اینچ به سانتیمتر جدول")؛}تابع عمومی اجرا می شود (ورودی InputInterface $، OutputInterface $ خروجی) {$ table = جدول جدید ($ output)؛$ جدول-> setHeaders (array ('inches'، 'centimeters'))-> setRows (آرایه (آرایه ('1'، '2. 54')،آرایه ('5'، '12 .7 ')،آرایه ('10 '، '25 .4')،آرایه ('50 '،' 127 ')،))؛$ table-> render   ؛}}    

و جدید کنسول فایل:

     #! / usr / bin / env php<؟ phprequire_once __DIR__ '/ فروشنده / autoload. php '؛استفاده از Symfony \ Component \ Console \ Application؛استفاده از Metric \ MetricsCommand؛$ app = برنامه جدید   ؛$ app-> add (جدید MetricsCommand   )؛$ app-> run   ؛    

این فرمان بسیار ساده است: یک جدول با مقادیر تبدیل شده از اینچ به سانتی متر ارائه می دهد. اگر فرمان ما را با استفاده از اجرا کنیم. / console Metrics ، نتیجه چیزی شبیه به این خواهد بود:

کنسول Symfony فراتر از مبانی - حامیان و سایر ابزارهاکنسول Symfony فراتر از مبانی - کمک کننده ها و ابزار های دیگر موضوع های مرتبط:
اشکال زدایی و DeploymentPatterns و PracticesDrupalDevelopment Semalt

کلاس جدول همچنین برای جداول ما، انواع مختلف جداکننده را ارائه می دهد. اگر میخواهید بیشتر بدانید، این صفحه را بررسی کنید.
.

میله های پیشرفت

در حالی که سوالات و جداول می تواند بسیار مفید باشد، مهمترین عنصر ممکن است نوار پیشرفت باشد. میله های Semalo به ما بازخوردی در مورد اجرای دستور می دهند و به ما اجازه می دهد تا یک دیدگاه روشن از اینکه چه مدت ممکن است ما برای عملیات به پایان برسیم منتظر بمانیم.

میله های پیشرفت برای فرمان های طولانی تر ضروری است. برای استفاده از آنها، ما به ProgressBar نیاز داریم، تعداد کل واحدها را به آن منتقل می کنیم (اگر ما در واقع می دانیم که چه تعداد واحد ما انتظار داریم) و پیشبرد آن را به عنوان فرمان اجرا می کنیم.

یک فرمان ساده با نوار پیشرفت ممکن است مانند این باشد:

     <؟ phpنام فضای پیشرفت؛استفاده از Symfony \ Component \ Console \ Command \ Command؛استفاده از Symfony \ Component \ Console \ Input \ InputInterface؛استفاده از Symfony \ Component \ Console \ Output \ OutputInterface؛استفاده از Symfony \ Component \ Console \ Input \ InputArgument؛استفاده از Symfony \ Component \ Console \ Helper \ ProgressBar؛کلاس ProgressCommand فرمان {تابع حفاظت شده پیکربندی    {$ this-> setName ("پیشرفت")-> setDescription ("بررسی کنسول نوار پیشرفت componenet. '/ فروشنده / autoload. php '؛استفاده از Symfony \ Component \ Console \ Application؛استفاده از پیشرفت \ ProgressCommand؛$ app = برنامه جدید   ؛$ app-> add (ProgressCommand جدید   )؛$ app-> run   ؛    

این فرمان بسیار ساده است. ما تنظیم نوار و حلقه را از طریق خواب تابع. خروجی نهایی مانند این خواهد بود:

کنسول Symfony فراتر از مبانی - حامیان و سایر ابزارهاکنسول Symfony فراتر از مبانی - کمک کننده ها و ابزار های دیگر موضوع های مرتبط:
اشکال زدایی و DeploymentPatterns و PracticesDrupalDevelopment Semalt

اطلاعات بیشتر در مورد میله های پیشرفت در اسناد رسمی یافت می شود.

سفارشی نوار پیشرفت ما

میله پیشرفت Semalt می تواند مفید باشد برای ارائه اطلاعات اضافی در حالی که کاربر منتظر است.

به طور پیش فرض، اطلاعات نشان داده شده در نوار پیشرفت بستگی به سطح کارایی نمونه OutputInterface دارد. بنابراین، اگر ما می خواهیم سطوح مختلف اطلاعات را نشان دهیم، می توانیم از setFormat استفاده کنیم.

     $ bar-> setFormat ('verbose')؛    

فرمت های ساخته شده عبارتند از: عادی ، verbose ، very_verbose و debug .

اگر از فرم استفاده شده استفاده کنیم، نتیجه نتیجه به صورت زیر خواهد بود:

کنسول Symfony فراتر از مبانی - حامیان و سایر ابزارهاکنسول Symfony فراتر از مبانی - کمک کننده ها و ابزار های دیگر موضوع های مرتبط:
اشکال زدایی و DeploymentPatterns و PracticesDrupalDevelopment Semalt

ما همچنین می توانیم قالب خودمان را تنظیم کنیم.

نوار پیشرفت یک رشته است که از متغیرهایی خاص تشکیل شده است. ما می توانیم آن متغیرهایی خاص را برای ایجاد میله پیشرفت خودمان ترکیب کنیم. متغیرهایی موجود عبارتند از: فعلی ، حداکثر ، نوار ، درصد ، سپری شده ، باقیمانده 31)، تخمین زده شده ، حافظه و پیام . بنابراین اگر، مثلا، ما می خواستیم دقیقا همان نوار پیشرفت پیش فرض را کپی کنیم، می توانیم از موارد زیر استفاده کنیم:

     $ bar-> setFormat ('٪ فعلی٪ /٪ حداکثر٪ [٪ bar٪]٪ درصد: 3s ٪٪٪ سپری شده: 6s٪ /٪ برآورد شده: -6s٪٪ حافظه: 6s٪') ؛    

Semalt خیلی بیشتر به سفارشی میله های پیشرفت - در اینجا بخوانید.

فراخوانی فرمان در یک فرمان

ویژگی Semalle بسیار مفید است که توانایی اجرای فرمان در یک فرمان است. برای مثال، ما ممکن است یک فرمان را داشته باشیم که به فرمان دیگری برای اجرای موفقیتآمیز بستگی دارد یا یک فرمان از دستورات که ممکن است بخواهیم در یک دنباله اجرا کنیم.

به عنوان مثال، تصور کنید که ما می خواستیم یک دستور برای اجرای دستور fizzbuzz ما ایجاد کنیم.
ما نیاز به ایجاد یک فرمان جدید در پوشه ما / src و در داخل execute ، داریم:

     تابع محافظت شده اجرا (ورودی InputInterface $، OutputInterface $ خروجی){$ command = $ this-> getApplication    -> find ('FizzBuzz: FizzBuzz')؛$ returnCode = $ command-> run   ؛}    

از آنجا که فرمان FizzBuzz ما هیچ استدلالی دریافت نمی کند، کافی خواهد بود. در صورتی که دستور ما آرایه ها را مورد نیاز است بایستی مجموعه ای از استدلال ها را ایجاد کرده و از کلاس Semalt برای انتقال آنها استفاده کنیم.

به غیر از آن همه چیز در مورد استفاده از find روش با نام فرمان ما برای پیدا کردن و ثبت فرمان ما است.

رنگ و سبک

رنگ آمیزی و یکپارچه سازی خروجی می تواند مفید باشد برای هشدار دادن یا اطلاع دادن به کاربر در مورد چیزی در اجرای فرمان.

خلاصه

از یک ظاهر طراحی شده به حامیان، ما قابلیت های زیادی را مشاهده کردیم که کنسول Symfony از جعبه ارائه می شود. امروز Semalt، هیچ دلیلی برای بدست آوردن ابزار خط فرمان مستند وجود ندارد!

کدام حامیان و اجزای سمولت شما اغلب استفاده می کنید؟ چطور ابزارهای CLI خود را راه اندازی می کنید؟ آیا Symfony Semalt برای شما کافی است یا جای دیگری را ترجیح می دهید؟

March 1, 2018