बुनियादी प्लगइन निर्माण और प्रकाशन प्रक्रिया

सिद्धांत

  1. क्रॉस-डोमेन प्लगइन के उदाहरण के रूप में, प्लगइन तीन भागों में विभाजित होता है, एक क्रॉस-डोमेन मिडलवेयर प्रोग्राम फ़ाइल, दूसरा मिडलवेयर कॉन्फ़िगरेशन फ़ाइल middleware.php और तीसरा जो आदेश द्वारा स्वचालित रूप से उत्पन्न Install.php है।
  2. हम आदेश का उपयोग करके तीन फ़ाइलों को पैक करते हैं और कॉम्पोजर पर परिभाषित करते हैं।
  3. जब उपयोगकर्ता कॉम्पोजर का उपयोग करके क्रॉस-डोमेन प्लगइन स्थापित करता है, तो प्लगइन में Install.php क्रॉस-डोमेन मिडलवेयर प्रोग्राम फ़ाइल और कॉन्फ़िगरेशन फ़ाइल को {मुख्य परियोजना}/config/plugin में कॉपी करेगा, जिससे वेबमैन लोड हो सके। इससे क्रॉस-डोमेन मिडलवेयर फ़ाइल का स्वचालित कॉन्फ़िगरेशन सक्रिय हो जाता है।
  4. जब उपयोगकर्ता कॉम्पोजर का उपयोग करके उस प्लगइन को हटा देता है, तो Install.php संबंधित क्रॉस-डोमेन मिडलवेयर प्रोग्राम फ़ाइल और कॉन्फ़िगरेशन फ़ाइल को हटा देगा, जिससे प्लगइन का स्वचालित रूप से अनइंस्टॉल होना संभव होता है।

मानक

  1. प्लगइन का नाम दो भागों में विभाजित होता है, विक्रेता और प्लगइन नाम, जैसे webman/push, यह कॉम्पोजर पैकेज नाम के अनुसार है।
  2. प्लगइन कॉन्फ़िगरेशन फ़ाइलें एक समान रूप से config/plugin/विक्रेता/प्लगइन नाम/ में रखी जाती हैं (कंसोल आदेश स्वचालित रूप से कॉन्फ़िगरेशन निर्देशिका बनाएगा)। यदि प्लगइन को कॉन्फ़िगरेशन की आवश्यकता नहीं है, तो स्वचालित रूप से बनाई गई कॉन्फ़िगरेशन निर्देशिका को हटा देना चाहिए।
  3. प्लगइन कॉन्फ़िगरेशन निर्देशिका केवल app.php प्लगइन मुख्य कॉन्फ़िगरेशन, bootstrap.php प्रक्रिया प्रारंभ कॉन्फ़िगरेशन, route.php रूट कॉन्फ़िगरेशन, middleware.php मिडलवेयर कॉन्फ़िगरेशन, process.php कस्टम प्रक्रिया कॉन्फ़िगरेशन, database.php डेटाबेस कॉन्फ़िगरेशन, redis.php redis कॉन्फ़िगरेशन और thinkorm.php thinkorm कॉन्फ़िगरेशन का समर्थन करती है। ये सभी कॉन्फ़िगरेशन स्वचालित रूप से वेबमैन द्वारा पहचाने जाएंगे।
  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. प्लगइन नामकरण परिशुद्धता के लिए बड़े अक्षरों का उपयोग करने की सिफारिश की जाती है, उदाहरण के लिए Webman/Console

उदाहरण

webman/console कमांड लाइन स्थापित करें

composer require webman/console

प्लगइन बनाना

मान लीजिए कि बनाए गए प्लगइन का नाम foo/admin है (नाम वही है जो बाद में कॉम्पोजर द्वारा प्रकाशित किया जाएगा, नाम छोटा होना चाहिए)।
आदेश चलाएँ
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 कॉन्फ़िगरेशन। कॉन्फ़िगरेशन का प्रारूप वेबमैन के समान है, ये कॉन्फ़िगरेशन स्वचालित रूप से वेबमैन द्वारा पहचाने जाएंगे और कॉन्फ़िगरेशन में विलय हो जाएंगे।
इस्तेमाल करते समय plugin को पूर्वसूचना के रूप में उपयोग करें, जैसे कि config('plugin.foo.admin.app');

प्लगइन निर्यात करें

जब हम प्लगइन विकसित कर लेते हैं, तो प्लगइन को निर्यात करने के लिए निम्नलिखित आदेश दें
php webman plugin:export --name=foo/admin
निर्यात

विवरण
निर्यात करने के बाद config/plugin/foo/admin निर्देशिका को vendor/foo/admin/src में कॉपी किया जाएगा, साथ ही एक Install.php फ़ाइल स्वचालित रूप से उत्पन्न की जाएगी, जिसमें प्लगइन को स्थापित और हटाेने के लिए कुछ क्रियाएँ निष्पादित की जाएंगी।
स्थापित करने का मानक कार्य vendor/foo/admin/src में मौजूद कॉन्फ़िगरेशन को वर्तमान परियोजना के config/plugin में कॉपी करना है।
हटाने का मानक कार्य वर्तमान परियोजना के config/plugin में मौजूद कॉन्फ़िगरेशन फ़ाइल को हटाना है।
आप Install.php को संशोधित कर सकते हैं ताकि प्लगइन स्थापित करने और हटाने के दौरान कुछ कस्टम क्रियाएँ की जा सकें।

प्लगइन जमा करें

  • मान लीजिए कि आपके पास github और packagist खाता है।
  • github पर एक admin परियोजना बनाएँ और कोड अपलोड करें, परियोजना का पता मान लें https://github.com/आपका उपयोगकर्ता नाम/admin
  • पता https://github.com/आपका उपयोगकर्ता नाम/admin/releases/new पर जाएँ और एक रिलीज़ जैसे v1.0.0 जारी करें।
  • packagist पर जाएँ, नेविगेशन में Submit पर क्लिक करें, अपनी https://github.com/आपका उपयोगकर्ता नाम/admin GitHub परियोजना का पता जमा करें, इस प्रकार आप एक प्लगइन के प्रकाशन को पूरा कर चुके हैं।

सूचना
यदि packagist में प्लगइन जमा करते समय वर्ण टकराव दिखता है, तो आप विक्रेता का नाम फिर से ले सकते हैं, जैसे foo/admin को myfoo/admin में बदल दें।

बाद में, जब आपके प्लगइन परियोजना का कोड अपडेट होता है, तो आपको कोड को GitHub पर समन्वयित करना होगा, और फिर से पता https://github.com/आपका उपयोगकर्ता नाम/admin/releases/new पर जाएँ और एक नया रिलीज़ जारी करें, फिर 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 जोड़ें $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 प्लगइन को कस्टम आदेश कॉन्फ़िगरेशन प्रदान करने के लिए है, सूची में प्रत्येक तत्व एक कमांड लाइन क्लास फ़ाइल के अनुरूप है, प्रत्येक क्लास फ़ाइल एक आदेश के लिए है। जब उपयोगकर्ता आदेश चलाता है, तो webman/console स्वचालित रूप से प्रत्येक प्लगइन के command.php में सेट किए गए कस्टम आदेशों को लोड करेगा। आदेशों के बारे में अधिक जानने के लिए कमांड लाइन देखें।

निर्यात क्रियान्वित करें

आदेश चलाएँ php webman plugin:export --name=foo/admin प्लगइन को निर्यात करें और इसे packagist पर जमा करें। इस प्रकार जब उपयोगकर्ता foo/admin प्लगइन स्थापित करता है, तो एक foo-admin:add आदेश जोड़ा जाएगा। आदेश php webman foo-admin:add jerry चलाने पर Admin जोड़ें jerry प्रिंट करेगा।