मूलभूत प्लगइन बनाने और प्रकाशित करने की प्रक्रिया
सिद्धांत
- क्रॉस-ऑरिजिन प्लगइन उदाहरण के तौर पर: प्लगइन के तीन भाग होते हैं – क्रॉस-ऑरिजिन मिडलवेयर फ़ाइल, कॉन्फ़िग फ़ाइल
middleware.php, और कमांड से स्वतः बनने वालाInstall.php। - इन तीन फ़ाइलों को पैक करके Composer पर प्रकाशित करने के लिए कमांड इस्तेमाल होता है।
- जब उपयोगकर्ता Composer से क्रॉस-ऑरिजिन प्लगइन इंस्टॉल करता है, तो
Install.phpमिडलवेयर और कॉन्फ़िग को{मुख्य प्रोजेक्ट}/config/pluginमें कॉपी करता है ताकि webman लोड कर सके और क्रॉस-ऑरिजिन सक्रिय हो जाए। - जब उपयोगकर्ता Composer से प्लगइन हटाता है, तो
Install.phpसंबंधित मिडलवेयर और कॉन्फ़िग फ़ाइलें हटा देता है और प्लगइन स्वतः अनइंस्टॉल हो जाता है।
निर्देश
- प्लगइन का नाम दो भागों में:
vendorऔरप्लगइन का नाम, जैसेwebman/push, Composer पैकेज के नाम के अनुरूप। - प्लगइन कॉन्फ़िग फ़ाइलें
config/plugin/vendor/प्लगइन का नाम/के तहत रखी जाती हैं (कंसोल कमांड कॉन्फ़िग डायरेक्टरी खुद बनाता है)। प्लगइन को कॉन्फ़िग की ज़रूरत न हो तो ऑटो-बनाई डायरेक्टरी हटानी होगी। - प्लगइन कॉन्फ़िग डायरेक्टरी केवल समर्थन करती है:
app.php(मुख्य कॉन्फ़िग),bootstrap.php(प्रोसेस स्टार्ट),route.php(रूट),middleware.php(मिडलवेयर),process.php(कस्टम प्रोसेस),database.php(डेटाबेस),redis.php(Redis),thinkorm.php(thinkorm)। ये webman द्वारा स्वतः पहचाने जाते हैं। - कॉन्फ़िग एक्सेस:
config('plugin.vendor.प्लगइन का नाम.कॉन्फ़िग फ़ाइल.आइटम');, जैसेconfig('plugin.webman.push.app.app_key')। - प्लगइन की अपनी डेटाबेस कॉन्फ़िग हो तो:
illuminate/databaseके लिएDb::connection('plugin.vendor.प्लगइन का नाम.कनेक्शन'),thinkormके लिएDb::connect('plugin.vendor.प्लगइन का नाम.कनेक्शन')। - प्लगइन को
app/में बिजनेस फ़ाइलें रखनी हों तो मुख्य प्रोजेक्ट और दूसरे प्लगइन से टकराव से बचना होगा। - प्लगइन को मुख्य प्रोजेक्ट में फ़ाइलें/फोल्डर्स कॉपी करने से बचना चाहिए। जैसे क्रॉस-ऑरिजिन प्लगइन में सिर्फ कॉन्फ़िग कॉपी होती है; मिडलवेयर फ़ाइलें
vendor/webman/cros/srcमें रहती हैं। - प्लगइन नेमस्पेस के लिए PascalCase सुझाया जाता है, जैसे
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,thinkorm.php। 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 अकाउंट हैं।
- GitHub पर
adminरिपॉजिटरी बनाएं और कोड पुश करें, जैसेhttps://github.com/आपका-यूज़रनेम/admin। https://github.com/आपका-यूज़रनेम/admin/releases/newपर जाकर रिलीज़ बनाएं, जैसेv1.0.0।- Packagist पर
Submitक्लिक करकेhttps://github.com/आपका-यूज़रनेम/adminभेजें, प्लगइन प्रकाशित हो जाएगा।
सुझाव
Packagist पर नाम कॉन्फ्लिक्ट हो तो दूसरा vendor चुनें, जैसे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, 'Add name');
}
/**
* @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;
}
}
नोट
प्लगइनों के कमांड टकराव से बचने के लिएvendor-plugin:कमांडफॉर्मेट इस्तेमाल करें। जैसे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इन्हें खुद लोड करता है। अधिक जानकारी कंसोल कमांड में।
एक्सपोर्ट चलाएं
php webman plugin:export --name=foo/admin चलाकर प्लगइन एक्सपोर्ट करें और Packagist पर प्रकाशित करें। foo/admin इंस्टॉल के बाद foo-admin:add कमांड उपलब्ध होगा। php webman foo-admin:add jerry चलाने पर Admin add jerry प्रिंट होगा।