আবেদন প্লাগইন

প্রতিটি আবেদন প্লাগইন একটি সম্পূর্ণ আবেদন, সোর্স কোড {মূল প্রকল্প}/plugin ডিরেক্টরির নিচে রাখা হয়।

পুঁজি
php webman app-plugin:create {প্লাগইন নাম} কমান্ড ব্যবহার করে আপনি স্থানীয়ভাবে একটি আবেদন প্লাগইন তৈরি করতে পারেন,
উদাহরণস্বরূপ 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

আমরা দেখতে পাচ্ছি যে একটি আবেদন প্লাগইন ওয়েবম্যানের মতো একই ডিরেক্টরি কাঠামো এবং কনফিগারেশন ফাইল রয়েছে। বাস্তবে একটি আবেদন প্লাগইন ডেভেলপ করা এবং একটি ওয়েবম্যান প্রকল্প ডেভেলপ করার অভিজ্ঞতা মৌলিকভাবে সমান। শুধু নিম্নলিখিত কয়েকটি বিষয় নোট করতে হবে।

নামস্পেস

প্লাগইন ডিরেক্টরি এবং নামকরণ PSR4 মানদণ্ড অনুসরণ করে, যেহেতু সমস্ত প্লাগইন plugin ডিরেক্টরির নিচে রাখা হয়, তাই নামস্থানগুলি 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 ফাইলটি নেওয়া হচ্ছে।

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

প্লাগইনের কনফিগারেশন সাধারণ ওয়েবম্যান প্রকল্পের মতোই, তবে প্লাগইনের কনফিগারেশন সাধারণত শুধুমাত্র বর্তমান প্লাগইনের জন্য কার্যকর হয়, প্রধান প্রকল্পের উপর সাধারণত কোনও প্রভাব নেই।
যেমন, 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();
// ধরে নিলাম প্রধান প্রকল্পে 'admin' সংযোগ একটি কনফিগারেশন আছে
Db::connection('admin')->table('admin')->first();

পুঁজি
thinkorm এরও অনুরূপ ব্যবহার রয়েছে।

Redis

Redis ব্যবহারের পদ্ধতির ডেটাবেসের মতো, উদাহরণস্বরূপ 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');

একইভাবে, যদি প্রধান প্রকল্পের Redis কনফিগারেশন পুনর্ব্যবহার করতে চান

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

লগ

লগ ক্লাসের ব্যবহারও ডেটাবেসের ব্যবহারের অনুরূপ

use support\Log;
Log::channel('plugin.admin.default')->info('test');

যদি প্রধান প্রকল্পের লগ কনফিগারেশন পুনর্ব্যবহার করতে চান, তাহলে সরাসরি এটি ব্যবহার করুন

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

আবেদন প্লাগইন ইনস্টল এবং আনইনস্টল

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