মৌলিক টুল তৈরি এবং প্রকাশের প্রক্রিয়া
নীতি
- ক্রস-ডোমেন প্লাগিন উদাহরণ হিসাবে, প্লাগিন তিনটি অংশে বিভক্ত: একটি ক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল, একটি মিডলওয়্যার কনফিগারেশন ফাইল
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.php
redis কনফিগারেশন,thinkorm.php
thinkorm কনফিগারেশন। এই কনফিগারেশনগুলি স্বয়ংক্রিয়ভাবে 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.php
redis কনফিগারেশন,thinkorm.php
thinkorm কনফিগারেশন। কনফিগারেশন ফরম্যাট 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
মুদ্রিত হবে।