هنگام انجام کارها یا آن ها را با عشق انجام دهید یا هرگز انجام ندهید.
این جمله از گاندی رضا را به این فکر فرو برده است که فکری برای انجام بسیاری از کارهای تکراری که باید بهطور متناوب انجام دهد بکند. بهعنوان مثال او از خط فرمان (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
را زیپ کرده و آپلود کنید.
ارسال پاسخ برای این سؤال