মৌলিক টুল তৈরি এবং প্রকাশের প্রক্রিয়া

নীতি

  1. ক্রস-ডোমেন প্লাগিন উদাহরণ হিসাবে, প্লাগিন তিনটি অংশে বিভক্ত: একটি ক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল, একটি মিডলওয়্যার কনফিগারেশন ফাইল middleware.php, এবং একটি কমান্ডের মাধ্যমে স্বয়ংক্রিয়ভাবে তৈরি হওয়া Install.php
  2. আমরা কমান্ড ব্যবহার করে তিনটি ফাইল প্যাকেজ করি এবং কোডের জন্য প্রকাশ করি।
  3. যখন ব্যবহারকারী composer এর মাধ্যমে ক্রস-ডোমেন প্লাগিন ইনস্টল করে, তখন প্লাগিনের Install.php ক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল এবং কনফিগারেশন ফাইল {মূল প্রকল্প}/config/plugin এ কপি করে, যাতে webman এটি লোড করতে পারে। এটি ক্রস-ডোমেন মিডলওয়্যার ফাইলের স্বয়ংক্রিয় কনফিগারেশনের কার্যকারিতা নিশ্চিত করে।
  4. যখন ব্যবহারকারী composer এর মাধ্যমে সেই প্লাগিন মুছে ফেলে, তখন Install.php সংশ্লিষ্ট ক্রস-ডোমেন মিডলওয়্যার প্রোগ্রাম ফাইল এবং কনফিগারেশন ফাইল মুছে দেয়, যাতে প্লাগিন স্বয়ংক্রিয়ভাবে আনইনস্টল করা হয়।

মানদণ্ড

  1. প্লাগিনের নাম দুটি অংশ নিয়ে গঠিত, উৎপাদক এবং প্লাগিনের নাম, যেমন webman/push, এটি composer প্যাকেজ নামের সাথে মেলে।
  2. প্লাগিনের কনফিগারেশন ফাইলগুলোকে config/plugin/উৎপাদক/প্লাগিনের নাম/ এ রাখা হয় (কনসোল কমান্ড স্বয়ংক্রিয়ভাবে কনফিগার ডিরেক্টরি তৈরি করবে)। যদি প্লাগিন কনফিগারেশনের প্রয়োজন না থাকে তবে স্বয়ংক্রিয়ভাবে তৈরি হওয়া কনফিগারেশন ডিরেক্টরি মুছে ফেলতে হবে।
  3. প্লাগিনের কনফিগারেশন ডিরেক্টরি শুধুমাত্র নিম্নলিখিত কনফিগারেশন সমর্থন করে: app.php প্লাগিনের মূল কনফিগারেশন, bootstrap.php প্রক্রিয়া শুরু কনফিগারেশন, route.php রু্ট কনফিগারেশন, middleware.php মিডলওয়্যার কনফিগারেশন, process.php কাস্টম প্রক্রিয়া কনফিগারেশন, database.php ডাটাবেস কনফিগারেশন, redis.php redis কনফিগারেশন, thinkorm.php thinkorm কনফিগারেশন। এই কনফিগারেশনগুলি স্বয়ংক্রিয়ভাবে webman দ্বারা শনাক্ত করা হবে।
  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 (নামটি পরে 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 মুদ্রিত হবে।