অ্যাপ্লিকেশন প্লাগইন

প্রতিটি অ্যাপ্লিকেশন প্লাগইন হল একটি সম্পূর্ণ অ্যাপ্লিকেশন, যা {মূল প্রকল্প}/plugin ডিরেক্টরিতে রয়েছে।

পরামর্শ
নিচের কমান্ড ব্যবহার করে php webman app-plugin:create {প্লাগইন নাম} (webman/console>=1.2.16 প্রয়োজন) আপনি লোকালে একটি অ্যাপ্লিকেশন প্লাগইন তৈরি করতে পারেন,
উদাহরণস্বরূপ php webman app-plugin:create cms এমনভাবে নিম্নলিখিত ডিরেক্টরি প্রস্তুত করবে

plugin/
└── cms
    ├── app
    │   ├── controller
    │   │   └── IndexController.php
    │   ├── exception
    │   │   └── Handler.php
    │   ├── functions.php
    │   ├── middleware
    │   ├── model
    │   └── view
    │       └── index
    │           └── index.html
    ├── config
    │   ├── app.php
    │   ├── autoload.php
    │   ├── container.php
    │   ├── database.php
    │   ├── exception.php
    │   ├── log.php
    │   ├── middleware.php
    │   ├── process.php
    │   ├── redis.php
    │   ├── route.php
    │   ├── static.php
    │   ├── thinkorm.php
    │   ├── translation.php
    │   └── view.php
    └── public

আমরা দেখছি যে একটি অ্যাপ্লিকেশন প্লাগইনের ডিরেক্টরি সমমত এবং কনফিগারেশন ফাইল থাকে যে সমান। বাস্তবত, একটি অ্যাপ্লিকেশন প্লাগইন ডেভেলপ করা এবং একটি webman প্রজেক্ট ডেভেলপ করা একই অভিজ্ঞতা, কেবলমাত্র কিছু বিষয়গুলি মনে রাখতে হয়।

নেমস্পেস

প্লাগইন ডিরেক্টরি এবং নেমস্পেস PSR4 মাপনীর অনুযায়ী পরিচালনা করে, কারণ প্লাগইনগুলি সবগুলি ডিরেক্টরিতে রাখা হয়, তাই নেমস্পেসগুলি plugin দিয়ে শুরু হয়, উদাহরণস্বরূপ plugin\cms\app\controller\UserController, এখানে cms হল প্লাগইনের উৎস কোড মূল ডিরেক্টরি।

URL অ্যাক্সেস

অ্যাপ্লিকেশন প্লাগইন URL ঠিকানা পথ হল /app দিয়ে শুরু, উদাহরণস্বরূপ plugin\cms\app\controller\UserController এর URL ঠিকানা হল http://127.0.0.1:8787/app/cms/user

স্থিতিশীল ফাইল

স্থিতিশীল ফাইলগুলি plugin/{প্লাগইন}/public ডিরেক্টরিতে রাখা হয়, উদাহরণস্বরূপ http://127.0.0.1:8787/app/cms/avatar.png আসলে plugin/cms/public/avatar.png ফাইলটি ধারণ করে।

কনফিগারেশন ফাইল

প্লাগইনের কনফিগারেশন সাধারণ webman প্রজেক্টের মতোই, তবে প্লাগইনের কনফিগারেশন সাধারণত কেবলমাত্র বর্তমান প্লাগইনের জন্য প্রযোজ্য হয়, মূল প্রকল্পের জন্য ধরা হয় না।
যেমনঃ plugin.cms.app.controller_suffix এর মানটি শুধুমাত্র প্লাগইনের নিয়ন্ত্রকের পরবর্তী অংশের জন্য প্রভাব ফেলে, মূল প্রকল্পে কোনো প্রভাব ফেলে না।
উদাহরণস্বরূপ, plugin.cms.app.controller_reuse এর মানটি শুধুমাত্র প্লাগইনের নিয়ন্ত্রক যথা কোনো প্রভাব ফেলে না।
উদাহরণস্বরূপ plugin.cms.middleware এর মানটি শুধুমাত্র প্লাগইনের মধ্যবর্তীগুলির নিয়ন্ত্রণের জন্য প্রভাব ফেলে, মূল প্রকল্পে কোনো প্রভাব ফেলে না।
উদাহরণস্বরূপ, plugin.cms.view এর মানটি শুধুমাত্র প্লাগইনের বিচার করা ডিরেক্টরিতে প্রভাব ফেলে, মূল প্রকল্পে কোনো প্রভাব ফেলে না।
উদাহরণস্বরূপ, plugin.cms.container এর মানটি শুধুমাত্র প্লাগইনের ব্যবহার করা কন্টেনারের জন্য প্রভাব ফেলে, মূল প্রকল্পে কোনো প্রভাব ফেলে না।
উদাহরণস্বরূপ, plugin.cms.exception এর মানটি শুধুমাত্র প্লাগইনের অস্বাভাবিক ব্যবস্থাপনা ক্লাসের জন্য প্রভাব ফেলে, মূল প্রকল্পে কোনো প্রভাব ফেলে না।
তবে, রাউট গ্লোবাল হয়, তাই প্লাগইন কনফিগারেশন করা রাউট গুলি ঝামেলা দেয়।

কনফিগ পাওয়া

একটি প্লাগইন কনফিগারেশন পেতে config('plugin.{প্লাগইন}.{নির্দিষ্ট কনফিগ}'); ব্যবহার করুন, যেমন plugin/cms/config/app.php এর সমস্ত কনফিগারেশন পেতে config('plugin.cms.app') ব্যবহার করুন।
একইভাবে, মূল প্রকল্প বা অন্য প্লাগইন ব্যবহার করে config('plugin.cms.xxx') ব্যবহার করে cms প্লাগইনের কনফিগারেশন পেতে পারেন।

সাপোর্ট করা না কনফিগারেশন

অ্যাপ্লিকেশন প্লাগইনগুলি server.php, session.php কনফিগারেশন সাপোর্ট করে না, app.request_class, app.public_path, app.runtime_path কনফিগারেশন সাপোর্ট করে না।

ডাটাবেস

প্লাগইন তাদের নিজেদের ডাটাবেস কনফিগার করতে পারে, উদাহরণস্বরূপ, plugin/cms/config/database.php এর কন্টেন্ট এমন হতে পারে

return  [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [ // mysql হল যোগাযোগের নাম
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'ডাটাবেস',
            'username'    => 'ইউজারনেম',
            'password'    => 'পাসওয়ার্ড',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
        'admin' => [ // admin হল যোগাযোগের নাম
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'ডাটাবেস',
            'username'    => 'ইউজারনেম',
            'password'    => 'পাসওয়ার্ড',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
    ],
];

উদাহরণস্বরূপ, Db::connection('plugin.{প্লাগইন}.{যোগাযোগের নাম}'); ব্যবহার করে সনাক্ত করা যাবে, উদাহরণস্বরূপ

use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();

মূল প্রকল্পের ডাটাবেস ব্যবহার করতে চাইলে, সরাসরি ব্যবহার করতে পারেন, উদাহরণস্বরূপ

use support\Db;
Db::table('user')->first();
// ধরা গেল মূল প্রকল্পে একটি অ্যাডমিন কানেকশন কনফিগার করা আছে
Db::connection('admin')->table('admin')->first();

পরামর্শ
থিংকওআরএম এই ধরনের ব্যবহার করে।

রেডিস

রেডিস ডাটাবেসের ব্যবহারকারী প্যারামিটার এবং ডাটাবেসের মতো, উদাহরণস্বরূপ plugin/cms/config/redis.php

return [
    'default' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 0,
    ],
    'cache' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 1,
    ],
];

ব্যবহার করার সময়

use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');

একইভাবে, আপনি চাইলে মূল প্রকল্পের রেডিস কনফিগারেশন পুনরায় ব্যবহার করতে পারেন

use support\Redis;
Redis::get('key');
// ধরা গেল মূল প্রকল্পে একটি ক্যাশ কানেকশন কনফিগার করা আছে
Redis::connection('cache')->get('key');

লগ

লগ ক্লাসের ব্যবহারও ডাটাবেস ব্যবহারের মতোই।

use support\Log;
Log::channel('plugin.admin.default')->info('পরীক্ষা');

যদি মাস্টার প্রোজেক্টের লগ কনফিগারেশন পুনর্ব্যবহার করতে চান, তবে সরাসরি নিম্নলিখিত ব্যবহার করতে হবে।

use support\Log;
Log::info('লগ বিষয়বস্ত');
// মনে করুন মাস্টার প্রোজেক্টে 'test' লগ কনফিগার আছে
Log::channel('test')->info('লগ বিষয়বস্ত');

অ্যাপ্লিকেশন প্লাগইন ইনস্টল এবং আনইনস্টল

অ্যাপ্লিকেশন প্লাগইন ইনস্টল করার সময় পাশাপাশি কেবল প্লাগইন ডিরেক্টরিটি {মাস্টার প্রোজেক্ট}/plugin ডিরেক্টরিতে কপি করতে হবে, সেইসাথে প্রভাব ফেলানোর জন্য reload বা restart করা প্রয়োজন।
আনইনস্টল করার সময় মুছে দিতে হবে {মাস্টার প্রোজেক্ট}/plugin এর অধীনের প্লাগইন ডিরেক্টরি।