ขั้นตอนการสร้างและเผยแพร่ปลั๊กอินพื้นฐาน
หลักการ
- โดยใช้ปลั๊กอินข้ามโดเมเป็นตัวอย่าง ปลั๊กอินจะแบ่งออกเป็นสามส่วนคือ ไฟล์โปรแกรมกลางข้ามโดเมน ไฟล์กำหนดค่ากลาง
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