ป้ายกำกับ: PHP

PHP: การเขียนคำสั่ง Command Line Interface (CLI) ด้วย Symfony Console ComponentPHP: การเขียนคำสั่ง Command Line Interface (CLI) ด้วย Symfony Console Component

แม้ว่า PHP จะมีชื่อเสียงโด่งดังในฐานะภาษาสำหรับพัฒนาเว็บไซต์ แต่ในโลกของการทำงานจริง (Backend Development) งานจำพวกการจัดการฐานข้อมูล (Migrations), การรันงานเบื้องหลัง (Cron Jobs), หรือการจัดการไฟล์ขนาดใหญ่ มักจะถูกสั่งการผ่าน Command Line Interface (CLI) ครับ และเครื่องมือมาตรฐานที่โปรเจกต์ระดับโลกอย่าง Laravel หรือ Symfony เลือกใช้คือ Symfony Console Component นั่นเอง


ทำไมต้องใช้ Symfony Console?

หากเราเขียน Script CLI ด้วย PHP ธรรมดา เราต้องจัดการกับ $argv เอง ซึ่งยุ่งยากมาก แต่ Symfony Console ช่วยให้เราจัดการกับ Arguments, Options, การแสดงผลตาราง (Tables), และแถบความคืบหน้า (Progress Bars) ได้อย่างเป็นระเบียบและเป็นมืออาชีพครับ


1. การติดตั้งเบื้องต้น

เริ่มต้นด้วยการติดตั้ง Component ผ่าน Composer ในโปรเจกต์ของคุณ:

composer require symfony/console

2. การสร้าง Command แรกของคุณ

โครงสร้างของคำสั่งจะประกอบด้วยชื่อคำสั่ง (Name), คำอธิบาย (Description) และส่วนการประมวลผล (Execute) ดังตัวอย่างโค้ดด้านล่างนี้ครับ:

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()
    {
        $this->setDescription('ทักทายผู้ใช้งานผ่านหน้าจอ Console')
             ->addArgument('name', InputArgument::REQUIRED, 'ชื่อที่คุณต้องการทักทาย');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $name = $input->getArgument('name');
        $output->writeln("<info>สวัสดีคุณ $name!</info> ยินดีต้อนรับสู่โลกของ PHP CLI");

        return Command::SUCCESS;
    }
}

3. การสร้างไฟล์ Console (Entry Point)

เราต้องมีไฟล์ PHP หนึ่งไฟล์ (เช่น bin/console) เพื่อทำหน้าที่เป็นจุดเริ่มต้นในการรวมคำสั่งต่างๆ เข้าด้วยกัน:

#!/usr/bin/env php
<?php

require __DIR__ . '/../vendor/autoload.php';

use Symfony\Component\Console\Application;

$application = new Application();
$application->add(new GreetCommand());
$application->run();

วิธีรันคำสั่ง

หลังจากบันทึกไฟล์แล้ว คุณสามารถเรียกใช้งานคำสั่งผ่าน Terminal ได้ทันที:

php bin/console app:greet "Plusmagi"

สรุป

Symfony Console ไม่เพียงแต่ทำให้โค้ด CLI ของคุณอ่านง่ายและเป็นระเบียบ แต่มันยังช่วยเพิ่มประสบการณ์การใช้งาน (User Experience) ให้กับนักพัฒนาด้วยกันผ่านระบบ Help และ Auto-completion ครับ หากคุณกำลังสร้างระบบ Automation ใน PHP ตัวเลือกนี้คือ “ต้องมี” (Must-have) จริง ๆ ครับ


อ่านเพิ่มเติม