ปลัักอินแอพลิเคชั่น
แต่ละปลัักอินแอพลิเคชั่นคือแอพลิเคชั่นที่สมบูรณ์แบบ โดยโค้ดซอร์สจะอยู่ที่ {โปรเจคหลัก}/plugin
เคล็ดลับ
ใช้คำสั่งphp webman app-plugin:create {ชื่อปลัักอิน}
(ต้องใช้ webman/console>=1.2.16) เพื่อสร้างแอพลิเคชั่นปลัักอินในเครื่องในโหมด local ตัวอย่างเช่นphp webman app-plugin:create cms
จะสร้างโครงสร้างไดเรกทอรีดังนี้
plugin/
└── cms
├── app
│ ├── controller
│ │ └── IndexController.php
│ ├── exception
│ │ └── Handler.php
│ ├── functions.php
│ ├── middleware
│ ├── model
│ └── view
│ └── index
│ └── index.html
├── config
│ ├── app.php
│ ├── autoload.php
│ ├── container.php
│ ├── database.php
│ ├── exception.php
│ ├── log.php
│ ├── middleware.php
│ ├── process.php
│ ├── redis.php
│ ├── route.php
│ ├── static.php
│ ├── thinkorm.php
│ ├── translation.php
│ └── view.php
└── public
เราสามารถเห็นได้ว่าแอพลิเคชั่นปลัักอินมีโครงสร้างไดเรกทอรีและแฟ้มตั้งแต่ webman เดียวกัน จริงๆแล้วการพัฒนาปลัักอินแอพลิเคชั่นคล้ายกับการพัฒนาโครงการ webman ธรรมดา โดยที่คุณต้องใส่ความสำคัญในด้านนี้
ชื่อโฟลเดอร์
โปรเจคและชื่อโฟลเดอร์ปลัักอินปฏิบัติตามข้อกำหนด PSR4 โดยเนื่องจากปลัักอินถูกวางไว้ในโฟลเดอร์ plugin ดังนั้นชื่อโฟลเดอร์จะเริ่มต้นด้วย plugin ตัวอย่างเช่น plugin\cms\app\controller\UserController
ที่นี่ cms คือไดเรกทอรีหลักของปลัักอิน
URL การเข้าถึง
เส้นทาง URL ของแอพลิเคชั่นปลัักอินเริ่มต้นด้วย /app
เช่น plugin\cms\app\controller\UserController
ที่ URL คือ http://127.0.0.1:8787/app/cms/user
แฟ้มแบบสถานะ
แฟ้มแบบสถานะจัดเก็บที่ plugin/{ชื่อปลัักอิน}/public
ตัวอย่างเมื่อเข้าถึง http://127.0.0.1:8787/app/cms/avatar.png
จริงๆแล้วเป็นการเข้าถึงแฟ้ม plugin/cms/public/avatar.png
การกำหนดค่า
การกำหนดค่าของปลัักอินเหมือนกับโปรเจกของ webman ทั้งนี้การกำหนดค่าของปลัักอินโดยทั่วไปจะมีผลกับปลัักอินเท่านั้น และไม่มีผลกับโปรเจกหลัก
เช่นค่า plugin.cms.app.controller_suffix
มีผลกับคำยของควบคุมของปลัักอินเท่านั้น และไม่มีผลกับโปรเจคหลัก
ตัวอย่างเช่นค่า plugin.cms.app.middleware
มีผลกับ middleware ของปลัักอินเท่านั้น และไม่มีผลกับโปรเจคหลัก
แต่เนื่องจากเส้นทางรู้เท่านั้นที่เป็นทั่้งโลก ค่ากำหนดของปลัักอินย่อมมีผลกับทั้งโลก
การเข้าถึงค่าสถานะ
การเข้าถึงค่าของปลัักอินทำได้โดยใช้วิธี config('plugin.{ชื่อปลัักอิน}.{การกำหนดค่า}')
ตัวอย่างการเข้าถึง plugin/cms/config/app.php
ทั้งหมดสามารถทำได้โดยใช้ config('plugin.cms.app')
อย่างเดียวกันโปรเจคหลักหรือปลัักอินอื่นๆ สามารถใช้ config('plugin.cms.xxx')
เพื่อเข้าถึงค่าของ cms ได้
ค่าที่ไม่รองรับ
ปลัักอินแอพลิเคชั่นไม่รองรับการกำหนดค่า server.php, session.php ไม่รองรับ app.request_class
, app.public_path
, app.runtime_path
ฐานข้อมูล
ปลัักอินสามารถกำหนดการตั้งค่าของฐานข้อมูลของตัวเองได้ ตัวอย่างเช่น plugin/cms/config/database.php
มีรายละเอียดดังนี้
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql เป็นชื่อการเชื่อมต่อ
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'ฐานข้อมูล',
'username' => 'ชื่อผู้ใช้',
'password' => 'รหัสผ่าน',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin เป็นชื่อการเชื่อมต่อ
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'ฐานข้อมูล',
'username' => 'ชื่อผู้ใช้',
'password' => 'รหัสผ่าน',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
วิธีการเรียกใช้คือ Db::connection('plugin.{ชื่อปลัักอิน}.{ชื่อการเชื่อมต่อ}');
เช่น
use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();
หากต้องการใช้ฐานข้อมูลของโปรเจคหลัก สามารถใช้โดยตรงได้ เช่น
use support\Db;
Db::table('user')->first();
// สมมติว่าโปรเจคหลักยังกำหนดการเชื่อมต่อ admin
Db::connection('admin')->table('admin')->first();
เคล็ดลับ
thinkorm ก็ใช้เป็นอย่างการเดียวกัน
Redis
การใช้งาน Redis คล้ายกับฐานข้อมูล ตัวอย่างเช่น plugin/cms/config/redis.php
มีรายละเอียดดังนี้
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
];
การใช้งานคือ
use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');
เช่นกันหากต้องการใช้งานกำหนดค่า Redis ของโปรเจคหลัก
use support\Redis;
Redis::get('key');
// สมมติว่าโปรเจคหลักยังกำหนดการเชื่อมต่อ cache
Redis::connection('cache')->get('key');
บันทึก
การใช้งานคล้ายกับการใช้งานฐานข้อมูล
use support\Log;
Log::channel('plugin.admin.default')->info('ทดสอบ');
หากต้องการใช้งานกำหนดค่าบันทึกของโปรเจคหลัก ให้ใช้เดียว
use support\Log;
Log::info('เนื้อหาบันทึก');
// สมมติว่าโปรเจคหลักมีการตั้งค่าบันทึก test
Log::channel('test')->info('เนื้อหาบันทึก');
การติดตั้งและถอดถอนปลัักอินแอพลิเคชั่น
เมื่อติดตั้งปลัักอินแอพลิเคชั่น คุณเพียงแค่คัดลอกโฟลเดอร์ปลัักอินไปยังโโปรเจคหลักที่อยู่ในโฟลเดอร์ /{โปรเจคหลัก}/plugin
และพิมพ์คำสั่ง reload หรือ restart เพื่อให้มีผล
เมื่อถอดถอนเพียงแค่ลบโดยตรงโฟลเดอร์ปลัักอินที่อยู่ในโฟลเดอร์ /{โปรเจคหลัก}/plugin