মৌলিক টুল তৈরি এবং প্রকাশের প্রক্রিয়া
নীতি
- ক্রস-ডোমেন প্লাগিন উদাহরণ হিসাবে, প্লাগিন তিনটি অংশে বিভক্ত: একটি ক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল, একটি মিডলওয়্যার কনফিগারেশন ফাইল
middleware.php, এবং একটি কমান্ডের মাধ্যমে স্বয়ংক্রিয়ভাবে তৈরি হওয়াInstall.php। - আমরা কমান্ড ব্যবহার করে তিনটি ফাইল প্যাকেজ করি এবং কোডের জন্য প্রকাশ করি।
- যখন ব্যবহারকারী composer এর মাধ্যমে ক্রস-ডোমেন প্লাগিন ইনস্টল করে, তখন প্লাগিনের
Install.phpক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল এবং কনফিগারেশন ফাইল{মূল প্রকল্প}/config/pluginএ কপি করে, যাতে webman এটি লোড করতে পারে। এটি ক্রস-ডোমেন মিডলওয়্যার ফাইলের স্বয়ংক্রিয় কনফিগারেশনের কার্যকারিতা নিশ্চিত করে। - যখন ব্যবহারকারী composer এর মাধ্যমে সেই প্লাগিন মুছে ফেলে, তখন
Install.phpসংশ্লিষ্ট ক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল এবং কনফিগারেশন ফাইল মুছে দেয়, যাতে প্লাগিন স্বয়ংক্রিয়ভাবে আনইনস্টল করা হয়।
মানদণ্ড
- প্লাগিনের নাম দুটি অংশ নিয়ে গঠিত,
উৎপাদকএবংপ্লাগিনের নাম, যেমনwebman/push, এটি composer প্যাকেজ নামের সাথে মেলে। - প্লাগিনের কনফিগারেশন ফাইলগুলোকে
config/plugin/উৎপাদক/প্লাগিনের নাম/এ রাখা হয় (কনসোল কমান্ড স্বয়ংক্রিয়ভাবে কনফিগার ডিরেক্টরি তৈরি করবে)। যদি প্লাগিন কনফিগারেশনের প্রয়োজন না থাকে তবে স্বয়ংক্রিয়ভাবে তৈরি হওয়া কনফিগারেশন ডিরেক্টরি মুছে ফেলতে হবে। - প্লাগিনের কনফিগারেশন ডিরেক্টরি শুধুমাত্র নিম্নলিখিত কনফিগারেশন সমর্থন করে:
app.phpপ্লাগিনের মূল কনফিগারেশন,bootstrap.phpপ্রক্রিয়া শুরু কনফিগারেশন,route.phpরু্ট কনফিগারেশন,middleware.phpমিডলওয়্যার কনফিগারেশন,process.phpকাস্টম প্রক্রিয়া কনফিগারেশন,database.phpডাটাবেস কনফিগারেশন,redis.phpredis কনফিগারেশন,thinkorm.phpthinkorm কনফিগারেশন। এই কনফিগারেশনগুলি স্বয়ংক্রিয়ভাবে webman দ্বারা শনাক্ত করা হবে। - প্লাগিন কনফিগারেশন পেতে নিচের পদ্ধতি ব্যবহার করে
config('plugin.উৎপাদক.প্লাগিনের নাম.কনফিগারেশন ফাইল.নির্দিষ্ট কনফিগারেশন উপাদান');উদাহরণস্বরূপconfig('plugin.webman.push.app.app_key') - যদি প্লাগিনের নিজের ডাটাবেস কনফিগারেশন থাকে তবে নিম্নলিখিত পদ্ধতি অনুসরণ করে এটি অ্যাক্সেস করবেন।
illuminate/databaseএর জন্যDb::connection('plugin.উৎপাদক.প্লাগিনের নাম.নির্দিষ্ট সংযোগ'),thinkromএর জন্যDb::connct('plugin.উৎপাদক.প্লাগিনের নাম.নির্দিষ্ট সংযোগ') - যদি প্লাগিনকে
app/ডিরেক্টরিতে ব্যবসায়িক ফাইল রাখতে হয় তবে নিশ্চিত করতে হবে যে এটি ব্যবহারকারীর প্রকল্প এবং অন্যান্য প্লাগিনের সাথে সংঘর্ষে আসবে না। - প্লাগিনকে প্রধান প্রকল্পে ফাইল বা ডিরেক্টরি কপি করা থেকে যতটা সম্ভব এড়ানো উচিত, যেমন ক্রস-ডোমেন প্লাগিন কনফিগারেশন ফাইল ব্যতীত প্রধান প্রকল্পে কপি করা প্রয়োজন, মিডলওয়্যার ফাইলগুলো
vendor/webman/cros/srcএ রাখার জন্য পরিকল্পনা করা হয়েছে, প্রধান প্রকল্পে কপি করার প্রয়োজন নেই। - প্লাগিনের নামকরণে বড় হাতের অক্ষর ব্যবহার করার পরামর্শ দেওয়া হয়, যেমন
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.phpredis কনফিগারেশন,thinkorm.phpthinkorm কনফিগারেশন। কনফিগারেশন ফরম্যাট webman এর মতো, এই কনফিগারেশনগুলি স্বয়ংক্রিয়ভাবে 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এ ক্লিক করুন, আপনার github প্রকল্পের ঠিকানাhttps://github.com/আপনার ইউজারনেম/adminজমা দিন, এর মাধ্যমে আপনি একটি প্লাগিন প্রকাশ সম্পন্ন করবেন।
সुझavi
যদি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 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প্লাগিনের কাস্টম কমান্ড কনফিগারেশন করার জন্য ব্যবহৃত হয়, অ্যারেটির প্রতিটি উপাদান একটি কমান্ড লাইনের ক্লাস ফাইলের সাথে মিলে যায়, প্রতিটি ক্লাস ফাইল একটি কমান্ডকে প্রতিনিধিত্ব করে। যখন ব্যবহারকারী কমান্ড লাইনে প্রবেশ করে, তখনwebman/consoleস্বয়ংক্রিয়ভাবে প্রতি প্লাগিনেরcommand.phpতে সেট করা কাস্টম কমান্ডগুলো লোড করবে। আরও তথ্য জানার জন্য কমান্ড লাইনের লিঙ্কটি দেখুন।
রপ্তানির কমান্ড চালান
কমান্ড চালান php webman plugin:export --name=foo/admin প্লাগিনটি রপ্তানি করার জন্য, এবং packagist এ জমা দিন। এর ফলে ব্যবহারকারী foo/admin প্লাগিন ইনস্টল করার পর একটি foo-admin:add কমান্ড স্বয়ংক্রিয়ভাবে যুক্ত হবে। কমান্ড php webman foo-admin:add jerry চালানোর ফলে Admin add jerry মুদ্রিত হবে।