अनुप्रयोग प्लगइन

प्रत्येक अनुप्रयोग प्लगइन एक पूर्ण अनुप्रयोग है, जिसका स्रोत कोड {मुख्य परियोजना}/plugin निर्देशिका में रखा गया है।

सूचना
कमांड php webman app-plugin:create {प्लगइन नाम} का उपयोग करके आप स्थानीय रूप से एक अनुप्रयोग प्लगइन बना सकते हैं,
उदाहरण के लिए 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

हमें एक अनुप्रयोग प्लगइन का वेबमैन के समान निर्देशिका संरचना और कॉन्फ़िगरेशन फ़ाइलें दिखाई देती हैं। वास्तव में, एक अनुप्रयोग प्लगइन का विकास एक वेबमैन परियोजना के विकास के अनुभव के समान होता है, बस निम्नलिखित कुछ पहलुओं पर ध्यान देने की आवश्यकता है।

नामित स्थान

प्लगइन निर्देशिका और नाम PSR4 मानक का पालन करते हैं, चूंकि प्लगइन सभी plugin निर्देशिका में रखे जाते हैं, इसलिए नामित स्थान सभी plugin से शुरू होते हैं, उदाहरण के लिए plugin\cms\app\controller\UserController यहाँ cms प्लगइन का स्रोत कोड मुख्य निर्देशिका है।

यूआरएल पहुँच

अनुप्रयोग प्लगइन यूआरएल पते का पथ /app से शुरू होता है, उदाहरण के लिए plugin\cms\app\controller\UserController का यूआरएल पता 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 फ़ाइल प्राप्त कर रहा है।

कॉन्फ़िगरेशन फ़ाइलें

प्लगइन की कॉन्फ़िगरेशन सामान्य वेबमैन परियोजनाओं के समान होती है, लेकिन प्लगइन की कॉन्फ़िगरेशन सामान्यतः केवल वर्तमान प्लगइन के लिए प्रभावी होती है, मुख्य परियोजना पर सामान्यतः कोई प्रभाव नहीं पड़ता।
उदाहरण के लिए, plugin.cms.app.controller_suffix का मान केवल प्लगइन के नियंत्रक उपसर्ग को प्रभावित करता है, मुख्य परियोजना पर कोई प्रभाव नहीं पड़ता।
उदाहरण के लिए, plugin.cms.app.controller_reuse का मान केवल प्लगइन के नियंत्रक को पुन: उपयोग करने पर प्रभाव डालता है, मुख्य परियोजना पर कोई प्रभाव नहीं पड़ता।
उदाहरण के लिए, plugin.cms.middleware का मान केवल प्लगइन के मध्यवर्ती सॉफ़्टवेयर को प्रभावित करता है, मुख्य परियोजना पर कोई प्रभाव नहीं पड़ता।
उदाहरण के लिए, plugin.cms.view का मान केवल प्लगइन द्वारा उपयोग की जाने वाली दृश्य को प्रभावित करता है, मुख्य परियोजना पर कोई प्रभाव नहीं पड़ता।
उदाहरण के लिए, plugin.cms.container का मान केवल प्लगइन द्वारा उपयोग किया जाने वाला कंटेनर प्रभावित करता है, मुख्य परियोजना पर कोई प्रभाव नहीं पड़ता।
उदाहरण के लिए, plugin.cms.exception का मान केवल प्लगइन की अपवाद प्रबंधन कक्षा को प्रभावित करता है, मुख्य परियोजना पर कोई प्रभाव नहीं पड़ता।

लेकिन चूंकि रूट वैश्विक होते हैं, इसलिए प्लगइन कॉन्फ़िगरेशन द्वारा निर्धारित रूट भी वैश्विक प्रभाव डालते हैं।

कॉन्फ़िगरेशन प्राप्त करना

किसी विशेष प्लगइन की कॉन्फ़िगरेशन प्राप्त करने का तरीका है config('plugin.{प्लगइन}.{विशिष्ट कॉन्फ़िगरेशन}'); उदाहरण के लिए, plugin/cms/config/app.php की सभी कॉन्फ़िगरेशन प्राप्त करने का तरीका है config('plugin.cms.app')
यही बात, मुख्य परियोजना या अन्य प्लगइनों के लिए भी लागू होती है, config('plugin.cms.xxx') का उपयोग करके cms प्लगइन की कॉन्फ़िगरेशन प्राप्त की जा सकती है।

unsupported configurations

अनुप्रयोग प्लगइन 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 का उपयोग भी इसी तरह है।

रेडिस

रेडिस का उपयोग डेटाबेस के समान होता है, उदाहरण के लिए 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');

इसी तरह, यदि आप मुख्य परियोजना के रेडिस कॉन्फ़िगरेशन का पुन: उपयोग करना चाहते हैं:

use support\Redis;
Redis::get('key');
// मान लीजिए कि मुख्य परियोजना ने एक cache कनेक्शन भी कॉन्फ़िगर किया है
Redis::connection('cache')->get('key');

लॉग

लॉग क्लास का उपयोग भी डेटाबेस के उपयोग के समान होता है:

use support\Log;
Log::channel('plugin.admin.default')->info('test');

अगर आप मुख्य परियोजना की लॉग कॉन्फ़िगरेशन का पुन: उपयोग करना चाहते हैं, तो सीधे उपयोग करें:

use support\Log;
Log::info('लॉग सामग्री');
// मान लीजिए कि मुख्य परियोजना में test लॉग कॉन्फ़िगरेशन है
Log::channel('test')->info('लॉग सामग्री');

अनुप्रयोग प्लगइन स्थापित करना और हटाना

अनुप्रयोग प्लगइन स्थापित करने के लिए आपको केवल प्लगइन निर्देशिका को {मुख्य परियोजना}/plugin निर्देशिका में कॉपी करना होगा, प्रभावी होने के लिए reload या restart की आवश्यकता होगी।
हटाने के लिए, {मुख्य परियोजना}/plugin के तहत संबंधित प्लगइन निर्देशिका को सीधे हटा दें।