QCLI


هنگام انجام کارها یا آن ها را با عشق انجام دهید یا هرگز انجام ندهید.

این جمله از گاندی رضا را به این فکر فرو برده است که فکری برای انجام بسیاری از کار‌های تکراری که باید به‌طور متناوب انجام دهد بکند. به‌عنوان مثال او از خط فرمان (command-line) خیلی استفاده می‌کند و همیشه آرزو داشت تا دستوراتی را خودش ایجاد و از آن‌ها استفاده کند.

در این سؤال باید به‌همراه او این آرزو را برآورده کنید.

جزئیات پروژه🔗

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها
qcli
├── core
│   ├── Commands
│   └── Command.php
├── stubs
│   └── command.stub
├── test
│   └── QCliSampleTest.php
├── composer.json
├── composer.lock
└── qcli
Plain text
راه‌اندازی پروژه

برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.

  • پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • دستور composer install را در پوشه‌ی اصلی پروژه برای نصب نیازمندی‌ها اجرا کنید.

در دایرکتوری اصلی پروژه، فایلی به نام qcli وجود دارد که یک اسکریپت PHP است. از این فایل برای هندل کردن دستورات استفاده می‌شود. این فایل پس از دریافت دستور، پارامتر‌های ورودی را برای اجرا به متد run کلاس QCli\Command ارسال می‌کند.

در ابتدا باید برنامه را طوری پیاده‌سازی کنید که دستور make:command name sign به‌صورت پیش‌فرض در برنامه موجود باشد. name نام کلاس دستور و sign امضای دستور است. وظیفه‌ی این دستور این است که دستورات دلخواه را در دایرکتوری core/Commands ایجاد کند. قالب دستوراتی که ایجاد می‌شوند باید مطابق محتویات فایل stubs/command.stub باشد:

extensionFromNamestubs/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

فرض کنید دستور زیر در خط فرمان وارد می‌شود:

php qcli make:command CustomCommand custom:command
Shell

با اجرای دستور فوق، باید فایل CustomCommand.php در مسیر core/Commands ساخته شود:

extensionFromNamecore/Commands/CustomCommand.php
<?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';
    }
}
PHP

هم‌چنین ممکن است کلاس‌هایی به‌صورت دستی (بدون استفاده از دستور پیش‌فرض make:command) در مسیر core/Commands ایجاد شوند. برنامه باید بتواند این دستورات را نیز شناسایی کند. تضمین می‌شود که این کلاس‌ها نیز مطابق محتویات فایل stubs/command.stub هستند.

اگر دستور ایجادشده در خط فرمان وارد شود، باید متد handle از کلاس دستور اجرا شود، یعنی در مثال قبل اگر دستور زیر وارد شود:

php qcli custom:command
Shell

باید عبارت Command custom:command is ready to implement چاپ شود.

نکات🔗

  • تضمین می‌شود که دو دستور با نام کلاس یا امضای یکسان ایجاد نخواهد شد.
  • این پروژه از استاندارد PSR-4 برای autoloading کلاس‌ها استفاده می‌کند.
  • شما تنها مجاز به اعمال تغییرات در دایرکتوری core هستید. می‌توانید فایل‌ها و دایرکتوری‌های جدیدی نیز در این دایرکتوری ایجاد کنید.
  • در صورت نیاز، می‌توانید متدهای دیگری نیز در کلاس QCli\Command پیاده‌سازی کنید.

آن‌چه باید آپلود کنید🔗

پس از اعمال تغییرات، پوشه‌ی core را زیپ کرده و آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.