أطر CLI لتطوير PHP: من البرامج النصية البسيطة إلى تطبيقات وحدة التحكم الاحترافية
تظل تطبيقات وحدة التحكم (CLI — واجهة سطر الأوامر) جزءًا لا يتجزأ من التطوير الحديث. تُستخدم لأتمتة المهام، ومعالجة البيانات، والترحيل، وتشغيل الاختبارات، وإدارة الخوادم. على الرغم من سمعته كلغة "ويب"، يوفر PHP إمكانيات ممتازة لإنشاء أدوات CLI قوية. في هذه المقالة، سنستعرض أفضل الأطر والمكتبات لتطوير تطبيقات وحدة التحكم في PHP، والتي ستساعدك على الانتقال من البرامج النصية البسيطة إلى حلول منظمة وقابلة للاختبار وقابلة للتوسع.
لماذا استخدام إطار CLI بدلاً من البرنامج النصي البسيط؟
تبدو كتابة برنامج نصي لوحدة التحكم "من الصفر" بسيطة، ولكنها تؤدي بسرعة إلى مشاكل:
- معالجة الوسائط: تحليل
$argvو$argcيدويًا أمر شاق وعرضة للأخطاء. - إخراج المعلومات: الألوان، أشرطة التقدم، الجداول — كل هذا يتطلب تنفيذًا منفصلاً.
- هيكل الكود: من الصعب تنظيم أوامر متعددة في ملف واحد.
- الاختبار: يصعب اختبار البرامج النصية لوحدة التحكم بدون أدوات خاصة.
استخدام إطار العمل يحل هذه المشاكل ويوفر بنية جاهزة، وحاوية حقن التبعية (DI)، ونظام أحداث، وتكامل مع المكتبات الشائعة.
Symfony Console — المعيار الذهبي
Symfony Console هو مكون من نظام Symfony البيئي، والذي أصبح المعيار الفعلي لإنشاء تطبيقات CLI في PHP. يُستخدم في Laravel (عبر Artisan)، و Doctrine، و Composer، والعديد من المشاريع الأخرى.
التثبيت ومثال أساسي
composer require symfony/consoleلنقم بإنشاء أمر بسيط يرحب بالمستخدم:
<?php// greet.phprequire __DIR__ . '/vendor/autoload.php';
use Symfony\\Component\\Console\\Application;use Symfony\\Component\\Console\\Command\\Command;use Symfony\\Component\\Console\\Input\\InputInterface;use Symfony\\Component\\Console\\Output\\OutputInterface;use Symfony\\Component\\Console\\Input\\InputArgument;
class GreetCommand extends Command{ protected static $defaultName = 'app:greet';
protected function configure(): void { $this->setDescription('يرحب بالمستخدم') ->addArgument('name', InputArgument::REQUIRED, 'اسم المستخدم'); }
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $output->writeln("مرحبًا، <info>$name</info>!"); return Command::SUCCESS; }}
$application = new Application();$application->add(new GreetCommand());$application->run();التشغيل: php greet.php app:greet أحمد سيطبع مرحبًا، أحمد! باللون الأخضر.
الإمكانيات الرئيسية لـ Symfony Console
- توليد المساعدة تلقائيًا: أمرا
listوhelpيعملان "فورًا". - أنواع الوسائط والخيارات: إلزامية/اختيارية، مصفوفات، قيم افتراضية.
- تنسيق الإخراج: وسوم
<info>و<comment>و<error>للألوان. - أشرطة التقدم والجداول: الفئتان المدمجتان
ProgressBarوTable. - دعم الأسئلة: إدخال تفاعلي عبر
QuestionHelper. - الأحداث ودورة الحياة: يمكن اعتراض تنفيذ الأمر.
مثال مع شريط التقدم
use Symfony\\Component\\Console\\Helper\\ProgressBar;
protected function execute(InputInterface $input, Outpu