هنگام انجام کارها یا آن ها را با عشق انجام دهید یا هرگز انجام ندهید.
این جمله از گاندی رضا را به این فکر فرو برده است که فکری برای انجام بسیاری از کارهای تکراری که باید بهطور متناوب انجام دهد بکند. بهعنوان مثال او از خط فرمان (command-line) خیلی استفاده میکند و همیشه آرزو داشت تا دستوراتی را خودش ایجاد و از آنها استفاده کند.
در این سؤال باید بههمراه او این آرزو را برآورده کنید.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلها
qcli
├── core
│ ├── Commands
│ └── Command.php
├── stubs
│ └── command.stub
├── test
│ └── QCliSampleTest.php
├── composer.json
├── composer.lock
└── qcli
راهاندازی پروژه
برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.
- پروژهی اولیه را دانلود و از حالت فشرده خارج کنید.
- دستور
composer installرا در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.
در دایرکتوری اصلی پروژه، فایلی به نام qcli وجود دارد که یک اسکریپت PHP است. از این فایل برای هندل کردن دستورات استفاده میشود. این فایل پس از دریافت دستور، پارامترهای ورودی را برای اجرا به متد run کلاس QCli\Command ارسال میکند.
در ابتدا باید برنامه را طوری پیادهسازی کنید که دستور make:command name sign بهصورت پیشفرض در برنامه موجود باشد. name نام کلاس دستور و sign امضای دستور است. وظیفهی این دستور این است که دستورات دلخواه را در دایرکتوری core/Commands ایجاد کند. قالب دستوراتی که ایجاد میشوند باید مطابق محتویات فایل stubs/command.stub باشد:
<?php
namespace QCli\Commands;
class {{ name }}
{
protected string $signature = '{{ sign }}';
protected string $description = '{{ name }} description';
public function handle()
{
echo 'Command ' . $this->signature . ' is ready to implement';
}
}
فرض کنید دستور زیر در خط فرمان وارد میشود:
php qcli make:command CustomCommand custom:command
با اجرای دستور فوق، باید فایل CustomCommand.php در مسیر core/Commands ساخته شود:
<?php
namespace QCli\Commands;
class CustomCommand
{
protected string $signature = 'custom:command';
protected string $description = 'CustomCommand description';
public function handle()
{
echo 'Command ' . $this->signature . ' is ready to implement';
}
}
همچنین ممکن است کلاسهایی بهصورت دستی (بدون استفاده از دستور پیشفرض make:command) در مسیر core/Commands ایجاد شوند. برنامه باید بتواند این دستورات را نیز شناسایی کند. تضمین میشود که این کلاسها نیز مطابق محتویات فایل stubs/command.stub هستند.
اگر دستور ایجادشده در خط فرمان وارد شود، باید متد handle از کلاس دستور اجرا شود، یعنی در مثال قبل اگر دستور زیر وارد شود:
php qcli custom:command
باید عبارت Command custom:command is ready to implement چاپ شود.
نکات
- تضمین میشود که دو دستور با نام کلاس یا امضای یکسان ایجاد نخواهد شد.
- این پروژه از استاندارد PSR-4 برای autoloading کلاسها استفاده میکند.
- شما تنها مجاز به اعمال تغییرات در دایرکتوری
coreهستید. میتوانید فایلها و دایرکتوریهای جدیدی نیز در این دایرکتوری ایجاد کنید. - در صورت نیاز، میتوانید متدهای دیگری نیز در کلاس
QCli\Commandپیادهسازی کنید.
آنچه باید آپلود کنید
پس از اعمال تغییرات، پوشهی core را زیپ کرده و آپلود کنید.
ارسال پاسخ برای این سؤال