ขั้นตอนการสร้างและเผยแพร่ปลั๊กอินพื้นฐาน

หลักการ

  1. โดยใช้ปลั๊กอินข้ามโดเมเป็นตัวอย่าง ปลั๊กอินจะแบ่งออกเป็นสามส่วนคือ ไฟล์โปรแกรมกลางข้ามโดเมน ไฟล์กำหนดค่ากลาง middleware.php และไฟล์ Install.php ที่สร้างขึ้นโดยอัตโนมัติผ่านคำสั่ง
  2. เราจะใช้คำสั่งเพื่อบรรจุไฟล์ทั้งสามและเผยแพร่ไปยัง composer
  3. เมื่อผู้ใช้ติดตั้งปลั๊กอินข้ามโดเมนด้วย composer ไฟล์ Install.php ในปลั๊กอินจะคัดลอกไฟล์โปรแกรมกลางข้ามโดเมนและไฟล์กำหนดค่าลงใน {主项目}/config/plugin เพื่อให้ webman โหลด ทำให้การกำหนดค่าของไฟล์กลางข้ามโดเมนมีผลโดยอัตโนมัติ
  4. เมื่อผู้ใช้ลบปลั๊กอินนี้ด้วย composer ไฟล์ Install.php จะลบไฟล์โปรแกรมกลางข้ามโดเมนและไฟล์กำหนดค่าอย่างเหมาะสม ทำให้ปลั๊กอินถูกยกเลิกการติดตั้งโดยอัตโนมัติ

ข้อกำหนด

  1. ชื่อปลั๊กอินประกอบด้วยสองส่วนคือ ผู้ผลิต และ ชื่อปลั๊กอิน เช่น webman/push ซึ่งจะตรงกับชื่อแพ็คเกจของ composer
  2. ไฟล์กำหนดค่าของปลั๊กอินจะถูกวางไว้ใน config/plugin/ผู้ผลิต/ชื่อปลั๊กอิน/ (คำสั่งใน console จะสร้างไดเรกทอรีการกำหนดค่าโดยอัตโนมัติ) หากปลั๊กอินไม่ต้องการการกำหนดค่า ให้ลบไดเรกทอรีการกำหนดค่าที่สร้างขึ้นโดยอัตโนมัติ
  3. ไดเรกทอรีการกำหนดค่าของปลั๊กอินรองรับเพียง app.php กำหนดค่าหลักของปลั๊กอิน, bootstrap.php กำหนดค่าการเริ่มกระบวนการ, route.php กำหนดค่าการจัดเส้นทาง, middleware.php กำหนดค่ากลาง, process.php กำหนดค่ากระบวนการที่กำหนดเอง, database.php กำหนดค่าฐานข้อมูล, redis.php กำหนดค่า redis, และ thinkorm.php กำหนดค่า thinkorm การกำหนดค่าเหล่านี้จะถูก webman รับรู้โดยอัตโนมัติ
  4. ฟังก์ชันการเข้าถึงการกำหนดค่าของปลั๊กอินใช้วิธีการดังต่อไปนี้ config('plugin.ผู้ผลิต.ชื่อปลั๊กอิน.ไฟล์กำหนดค่า.ชิ้นส่วนการกำหนดค่า'); เช่น config('plugin.webman.push.app.app_key')
  5. หากปลั๊กอินมีการกำหนดค่าฐานข้อมูลของตนเอง ให้นำวิธีนี้ไปใช้ illuminate/database คือ Db::connection('plugin.ผู้ผลิต.ชื่อปลั๊กอิน.การเชื่อมต่อที่เฉพาะเจาะจง') และ thinkrom คือ Db::connct('plugin.ผู้ผลิต.ชื่อปลั๊กอิน.การเชื่อมต่อที่เฉพาะเจาะจง')
  6. หากปลั๊กอินต้องการวางไฟล์ทางธุรกิจในไดเรกทอรี app/ ต้องรับประกันว่าไม่เกิดความขัดแย้งกับโครงการของผู้ใช้หรือตัวปลั๊กอินอื่น ๆ
  7. ปลั๊กอินควรหลีกเลี่ยงการคัดลอกไฟล์หรือไดเรกทอรีไปยังโครงการหลัก เช่น ปลั๊กอินข้ามโดเมนจะต้องคัดลอกเฉพาะไฟล์กำหนดค่าไปยังโครงการหลักเท่านั้น ไฟล์กลางควรอยู่ใน vendor/webman/cros/src ไม่ต้องคัดลอกไปยังโครงการหลัก
  8. แนะนำให้ใช้ namespace ของปลั๊กอินเป็นตัวใหญ่ เช่น Webman/Console

ตัวอย่าง

ติดตั้งคำสั่ง webman/console

composer require webman/console

สร้างปลั๊กอิน

สมมุติว่าปลั๊กอินที่สร้างขึ้นมีชื่อว่า foo/admin (ชื่อจะต้องเป็นชื่อโปรเจกต์ที่จะเผยแพร่ใน composer โดยต้องเป็นตัวพิมพ์เล็ก)
รันคำสั่ง
php webman plugin:create --name=foo/admin

การสร้างปลั๊กอินจะสร้างไดเรกทอรี vendor/foo/admin สำหรับเก็บไฟล์ของปลั๊กอินที่เกี่ยวข้อง และ config/plugin/foo/admin สำหรับเก็บไฟล์กำหนดค่าของปลั๊กอินที่เกี่ยวข้อง

หมายเหตุ
config/plugin/foo/admin รองรับการกำหนดค่าดังต่อไปนี้ , app.php กำหนดค่าหลักของปลั๊กอิน, bootstrap.php กำหนดค่าการเริ่มกระบวนการ, route.php กำหนดค่าการจัดเส้นทาง, middleware.php กำหนดค่ากลาง, process.php กำหนดค่ากระบวนการที่กำหนดเอง, database.php กำหนดค่าฐานข้อมูล, redis.php กำหนดค่า redis, thinkorm.php กำหนดค่า thinkorm รูปแบบการกำหนดค่าจะต้องตรงตามเว็บแมน การกำหนดค่าเหล่านี้จะถูก webman รับรู้โดยอัตโนมัติเพื่อรวมอยู่ในการกำหนดค่า
สามารถเข้าถึงได้โดยใช้ plugin เป็นคำนำหน้า เช่น config('plugin.foo.admin.app');

ส่งออกปลั๊กอิน

เมื่อเราพัฒนาปลั๊กอินเสร็จเรียบร้อยแล้ว ให้รันคำสั่งต่อไปนี้เพื่อส่งออกปลั๊กอิน
php webman plugin:export --name=foo/admin

คำอธิบาย
หลังจากการส่งออกจะคัดลอกไดเรกทอรี config/plugin/foo/admin ลงใน vendor/foo/admin/src พร้อมทั้งสร้าง Install.php ขึ้นโดยอัตโนมัติ Install.php ใช้สำหรับการติดตั้งอัตโนมัติและการถอนการติดตั้ง
การติดตั้งจะดำเนินการโดยอัตโนมัติคือคัดลอกการกำหนดค่าจากไดเรกทอรี vendor/foo/admin/src ไปยังโครงการปัจจุบัน config/plugin
การลบจะลบไฟล์กำหนดค่าใน config/plugin ของโครงการปัจจุบันโดยอัตโนมัติ
คุณสามารถแก้ไข Install.php เพื่อดำเนินการตามความต้องการในการติดตั้งและถอนการติดตั้งปลั๊กอินได้

ส่งปลั๊กอิน

  • สมมติว่าคุณมีบัญชี github และ packagist
  • สร้างโปรเจกต์ admin บน github และอัพโหลดโค้ด โดยสมมติว่า URL ของโปรเจกต์คือ https://github.com/ชื่อผู้ใช้/admin
  • เข้าไปที่ https://github.com/ชื่อผู้ใช้/admin/releases/new เพื่อเผยแพร่ release เช่น v1.0.0
  • ไปที่ packagist และคลิกที่ Submit ในแถบเมนู นำ URL โครงการ github ของคุณ https://github.com/ชื่อผู้ใช้/admin ไปเผยแพร่ ซึ่งจะทำให้ปลั๊กอินถูกเผยแพร่เรียบร้อย

提示
หากการส่งปลั๊กอินที่ packagist แสดงว่ามีความขัดแย้ง สามารถตั้งชื่อผู้ผลิตใหม่ เช่น เปลี่ยนชื่อจาก foo/admin เป็น myfoo/admin

เมื่อโค้ดโปรเจกต์ของคุณมีการอัปเดตในภายหลัง คุณจะต้องซิงค์โค้ดกับ github และเข้าไปที่ https://github.com/ชื่อผู้ใช้/admin/releases/new เพื่อเผยแพร่ release อีกครั้ง จากนั้นไปที่ https://packagist.org/packages/foo/admin และคลิกปุ่ม Update เพื่ออัปเดตเวอร์ชัน

เพิ่มคำสั่งให้กับปลั๊กอิน

บางครั้งปลั๊กอินของเราต้องการคำสั่งที่กำหนดเองเพื่อให้บริการฟังก์ชันเสริมบางอย่าง เช่น เมื่อติดตั้งปลั๊กอิน webman/redis-queue โปรเจกต์จะเพิ่มคำสั่ง redis-queue:consumer อัตโนมัติ ผู้ใช้เพียงแค่รัน php webman redis-queue:consumer send-mail ก็จะสร้างคลาสผู้บริโภค SendMail.php ในโปรเจกต์ ซึ่งช่วยในการพัฒนาอย่างรวดเร็ว

สมมติว่าปลั๊กอิน foo/admin ต้องการเพิ่มคำสั่ง foo-admin:add ให้ทำตามขั้นตอนดังต่อไปนี้

สร้างคำสั่งใหม่

สร้างไฟล์คำสั่ง vendor/foo/admin/src/FooAdminAddCommand.php

<?php

namespace Foo\Admin;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class FooAdminAddCommand extends Command
{
    protected static $defaultName = 'foo-admin:add';
    protected static $defaultDescription = 'นี่คือคำอธิบายคำสั่ง';

    /**
     * @return void
     */
    protected function configure()
    {
        $this->addArgument('name', InputArgument::REQUIRED, 'เพิ่มชื่อ');
    }

    /**
     * @param InputInterface $input
     * @param OutputInterface $output
     * @return int
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $name = $input->getArgument('name');
        $output->writeln("Admin add $name");
        return self::SUCCESS;
    }

}

หมายเหตุ
เพื่อหลีกเลี่ยงความขัดแย้งของคำสั่งระหว่างปลั๊กอิน แนะนำให้ใช้รูปแบบคำสั่งเป็น ผู้ผลิต-ชื่อปลั๊กอิน:คำสั่งที่เฉพาะเจาะจง เช่น ปลั๊กอิน foo/admin คำสั่งทั้งหมดควรใช้คำนำหน้า foo-admin: เช่น foo-admin:add

เพิ่มการกำหนดค่า

สร้างการกำหนดค่าใหม่ config/plugin/foo/admin/command.php

<?php

use Foo\Admin\FooAdminAddCommand;

return [
    FooAdminAddCommand::class,
    // ....สามารถเพิ่มการกำหนดค่าได้หลายรายการ...
];

提示
command.php ใช้สำหรับกำหนดคำสั่งที่กำหนดเองให้กับปลั๊กอิน อาร์เรย์แต่ละรายการในอาร์เรย์นี้จะตรงกับไฟล์คลาสคำสั่งแต่ละไฟล์ ไฟล์แต่ละไฟล์จะตรงกับคำสั่งแต่ละอัน เมื่อผู้ใช้รันคำสั่ง คำสั่งที่กำหนดเองที่ตั้งไว้ใน command.php จะถูกโหลดโดยอัตโนมัติ หากต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับคำสั่ง กรุณาอ่าน คำสั่ง

ดำเนินการส่งออก

รันคำสั่ง php webman plugin:export --name=foo/admin เพื่อส่งออกปลั๊กอิน และส่งไปที่ packagist ดังนั้นเมื่อผู้ใช้ติดตั้งปลั๊กอิน foo/admin จะมีการเพิ่มคำสั่ง foo-admin:add ขึ้นมา รัน php webman foo-admin:add jerry จะพิมพ์ว่า Admin add jerry