ขั้นตอนการสร้างและเผยแพร่ปลั๊กอินพื้นฐาน
หลักการ
- โดยใช้ปลั๊กอินข้ามโดเมเป็นตัวอย่าง ปลั๊กอินจะแบ่งออกเป็นสามส่วนคือ ไฟล์โปรแกรมกลางข้ามโดเมน ไฟล์กำหนดค่ากลาง
middleware.phpและไฟล์Install.phpที่สร้างขึ้นโดยอัตโนมัติผ่านคำสั่ง - เราจะใช้คำสั่งเพื่อบรรจุไฟล์ทั้งสามและเผยแพร่ไปยัง composer
- เมื่อผู้ใช้ติดตั้งปลั๊กอินข้ามโดเมนด้วย composer ไฟล์
Install.phpในปลั๊กอินจะคัดลอกไฟล์โปรแกรมกลางข้ามโดเมนและไฟล์กำหนดค่าลงใน{主项目}/config/pluginเพื่อให้ webman โหลด ทำให้การกำหนดค่าของไฟล์กลางข้ามโดเมนมีผลโดยอัตโนมัติ - เมื่อผู้ใช้ลบปลั๊กอินนี้ด้วย composer ไฟล์
Install.phpจะลบไฟล์โปรแกรมกลางข้ามโดเมนและไฟล์กำหนดค่าอย่างเหมาะสม ทำให้ปลั๊กอินถูกยกเลิกการติดตั้งโดยอัตโนมัติ
ข้อกำหนด
- ชื่อปลั๊กอินประกอบด้วยสองส่วนคือ
ผู้ผลิตและชื่อปลั๊กอินเช่นwebman/pushซึ่งจะตรงกับชื่อแพ็คเกจของ composer - ไฟล์กำหนดค่าของปลั๊กอินจะถูกวางไว้ใน
config/plugin/ผู้ผลิต/ชื่อปลั๊กอิน/(คำสั่งใน console จะสร้างไดเรกทอรีการกำหนดค่าโดยอัตโนมัติ) หากปลั๊กอินไม่ต้องการการกำหนดค่า ให้ลบไดเรกทอรีการกำหนดค่าที่สร้างขึ้นโดยอัตโนมัติ - ไดเรกทอรีการกำหนดค่าของปลั๊กอินรองรับเพียง
app.phpกำหนดค่าหลักของปลั๊กอิน,bootstrap.phpกำหนดค่าการเริ่มกระบวนการ,route.phpกำหนดค่าการจัดเส้นทาง,middleware.phpกำหนดค่ากลาง,process.phpกำหนดค่ากระบวนการที่กำหนดเอง,database.phpกำหนดค่าฐานข้อมูล,redis.phpกำหนดค่า redis, และthinkorm.phpกำหนดค่า thinkorm การกำหนดค่าเหล่านี้จะถูก webman รับรู้โดยอัตโนมัติ - ฟังก์ชันการเข้าถึงการกำหนดค่าของปลั๊กอินใช้วิธีการดังต่อไปนี้
config('plugin.ผู้ผลิต.ชื่อปลั๊กอิน.ไฟล์กำหนดค่า.ชิ้นส่วนการกำหนดค่า');เช่นconfig('plugin.webman.push.app.app_key') - หากปลั๊กอินมีการกำหนดค่าฐานข้อมูลของตนเอง ให้นำวิธีนี้ไปใช้
illuminate/databaseคือDb::connection('plugin.ผู้ผลิต.ชื่อปลั๊กอิน.การเชื่อมต่อที่เฉพาะเจาะจง')และthinkromคือDb::connct('plugin.ผู้ผลิต.ชื่อปลั๊กอิน.การเชื่อมต่อที่เฉพาะเจาะจง') - หากปลั๊กอินต้องการวางไฟล์ทางธุรกิจในไดเรกทอรี
app/ต้องรับประกันว่าไม่เกิดความขัดแย้งกับโครงการของผู้ใช้หรือตัวปลั๊กอินอื่น ๆ - ปลั๊กอินควรหลีกเลี่ยงการคัดลอกไฟล์หรือไดเรกทอรีไปยังโครงการหลัก เช่น ปลั๊กอินข้ามโดเมนจะต้องคัดลอกเฉพาะไฟล์กำหนดค่าไปยังโครงการหลักเท่านั้น ไฟล์กลางควรอยู่ใน
vendor/webman/cros/srcไม่ต้องคัดลอกไปยังโครงการหลัก - แนะนำให้ใช้ 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