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

অবস্থান

webman এর কনফিগারেশন ফাইলটি config/ ডিরেক্টরিতে থাকে, প্রকল্পে config() ফাংশন ব্যবহার করে সংশ্লিষ্ট কনফিগারেশন পেতে পারেন।

কনফিগারেশন পাওয়া

সব কনফিগারেশন পাওয়া

config();

config/app.php এর সব কনফিগারেশন পাওয়া

config('app');

config/app.php এর debug কনফিগারেশন পাওয়া

config('app.debug');

যদি কনফিগারেশন একটি অ্যারে হয়, তবে . ব্যবহার করে অ্যারের অভ্যন্তরীণ উপাদানের মান পাওয়া যেতে পারে, উদাহরণস্বরূপ

config('file.key1.key2');

ডিফল্ট মূল্য

config($key, $default);

config দ্বিতীয় প্যারামিটার হিসেবে ডিফল্ট মূল্য পাঠায়, যদি কনফিগারেশন বিদ্যমান না থাকে তবে ডিফল্ট মূল্য ফেরত দেয়।
কনফিগারেশন বিদ্যমান না হলে এবং কোনো ডিফল্ট মূল্য সেট করা না হলে তা null ফেরত দেবে।

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

ডেভেলপাররা config/ ডিরেক্টরিতে তাদের নিজস্ব কনফিগারেশন ফাইল যোগ করতে পারেন, যেমন

config/payment.php

<?php
return [
    'key' => '...',
    'secret' => '...'
];

কনফিগারেশন পাওয়ার সময় ব্যবহার

config('payment');
config('payment.key');
config('payment.key');

কনফিগারেশন পরিবর্তন

webman ডাইনামিক কনফিগারেশন পরিবর্তন সমর্থন করে না, সব কনফিগারেশন হাতে সংশোধন করতে হবে সংশ্লিষ্ট কনফিগারেশন ফাইলে, এবং reload বা restart করে পুনরায় চালু করতে হবে।

দ্রষ্টব্য
সার্ভার কনফিগারেশন config/server.php এবং প্রক্রিয়া কনফিগারেশন config/process.php হলো reload সমর্থিত নয়, কার্যকর করতে restart করতে হবে।

বিশেষ সতর্কতা

যদি আপনি config এর উপডিরেক্টরিতে কনফিগারেশন ফাইল তৈরি ও পড়তে চান, যেমন: config/order/status.php, তবে config/order ডিরেক্টরির মধ্যে একটি app.php ফাইল থাকা দরকার, এর বিষয়বস্তু নিচের মতো

<?php
return [
    'enable' => true,
];

enable হল true, যা ফ্রেমওয়ার্ককে এই ডিরেক্টরির কনফিগারেশন পড়তে দেয়।
অবশেষে কনফিগারেশন ফাইলের ডিরেক্টরি গাছ নিচের মতো হবে

├── config
│   ├── order
│   │   ├── app.php
│   │   └── status.php

এভাবে আপনি config.order.status ব্যবহার করে status.php তে ফেরত দেওয়া অ্যারে বা নির্দিষ্ট কী ডেটা পড়তে পারবেন।

কনফিগারেশন ফাইল ব্যাখ্যা

server.php

return [
    'listen' => 'http://0.0.0.0:8787', // শোনা পোর্ট (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'transport' => 'tcp', // ট্রান্সপোর্ট লেয়ার প্রোটোকল (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'context' => [], // ssl এর মতো কনফিগারেশন (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'name' => 'webman', // প্রক্রিয়ার নাম (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'count' => cpu_count() * 4, // প্রক্রিয়ার সংখ্যা (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'user' => '', // ব্যবহারকারী (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'group' => '', // ব্যবহারকারী গ্রুপ (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'reusePort' => false, // পোর্ট পুনঃব্যবহারের সক্রিয়তা (1.6.0 সংস্করণ থেকে সরানো হয়েছে, config/process.php তে কনফিগার করুন)
    'event_loop' => '',  // ইভেন্ট লুপ ক্লাস, ডিফল্টভাবে স্বয়ংক্রিয়ভাবে নির্বাচন করা হয়
    'stop_timeout' => 2, // stop/restart/reload সংকেত পাওয়ার পর, প্রক্রিয়া বন্ধ করতে সর্বাধিক সময়কাল, এই সময়কাল অতিক্রম করলে প্রক্রিয়া জোরপূর্বক বন্ধ হবে
    'pid_file' => runtime_path() . '/webman.pid', // পিডি ফাইলের সংরক্ষণের অবস্থান
    'status_file' => runtime_path() . '/webman.status', // স্ট্যাটাস ফাইলের সংরক্ষণের অবস্থান
    'stdout_file' => runtime_path() . '/logs/stdout.log', // মানসম্মত আউটপুট ফাইলের অবস্থান, webman চালানোর পর সব আউটপুট এই ফাইলে লেখা হবে
    'log_file' => runtime_path() . '/logs/workerman.log', // workerman লগ ফাইলের অবস্থান
    'max_package_size' => 10 * 1024 * 1024 // সর্বাধিক ডেটা প্যাকেজ আকার, 10M। আপলোডের ফাইলের আকার এই সীমার দ্বারা প্রভাবিত হবে
];

app.php

return [
    'debug' => true,  // ডিবাগ মোড সক্রিয় আছে কি না, সক্রিয় হলে পৃষ্ঠার ত্রুটি ডিবাগ তথ্য সহ কল স্ট্যাক আউটপুট করবে, নিরাপত্তার জন্য উৎপাদন পরিবেশে ডিবাগ বন্ধ করা উচিত
    'error_reporting' => E_ALL, // ত্রুটি রিপোর্টিং স্তর
    'default_timezone' => 'Asia/Shanghai', // ডিফল্ট সময় অঞ্চল
    'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // পাবলিক ডিরেক্টরির অবস্থান
    'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // রানটাইম ডিরেক্টরির অবস্থান
    'controller_suffix' => 'Controller', // কন্ট্রোলারের সূচক
    'controller_reuse' => false, // কন্ট্রোলার পুনঃব্যবহার করা হবে কি না
];

process.php

use support\Log;
use support\Request;
use app\process\Http;
global $argv;

return [
     // webman প্রক্রিয়ার কনফিগারেশন
    'webman' => [ 
        'handler' => Http::class, // প্রক্রিয়া প্রক্রিয়াকরণ ক্লাস
        'listen' => 'http://0.0.0.0:8787', // শোনার ঠিকানা
        'count' => cpu_count() * 4, // প্রক্রিয়ার সংখ্যা, ডিফল্টভাবে cpu এর 4 গুণ
        'user' => '', // প্রক্রিয়া চালানোর ব্যবহারকারী, নিম্নসাধন ব্যবহারকারী ব্যবহার করা উচিত
        'group' => '', // প্রক্রিয়া চালানোর ব্যবহারকারী গ্রুপ, নিম্নসাধন ব্যবহারকারী গ্রুপ ব্যবহার করা উচিত
        'reusePort' => false, // reusePort সক্রিয় করা হয়েছে কি না, সক্রিয় হলে সংযোগগুলি আলাদা কাজের প্রক্রিয়াতে সমানভাবে বিতরণ হবে
        'eventLoop' => '', // ইভেন্ট লুপ ক্লাস, খালি হলে স্বয়ংক্রিয়ভাবে server.event_loop কনফিগারেশন ব্যবহার করা হবে
        'context' => [], // শোনার প্রসঙ্গ কনফিগারেশন, যেমন ssl
        'constructor' => [ // প্রক্রিয়া প্রক্রিয়াকরণ ক্লাসের কনস্ট্রাক্টর প্যারামিটার, এই উদাহরণে Http ক্লাসের কনস্ট্রাক্টর প্যারামিটার
            'requestClass' => Request::class, // কাস্টম রিকোয়েস্ট ক্লাস ব্যবহার করা যাবে
            'logger' => Log::channel('default'), // লগ উদাহরণ
            'appPath' => app_path(), // অ্যাপ ডিরেক্টরির অবস্থান
            'publicPath' => public_path() // পাবলিক ডিরেক্টরির অবস্থান
        ]
    ],
    // মনিটর প্রক্রিয়া, ফাইল আপডেট স্বয়ংক্রিয় লোড এবং মেমোরি লিক নিরীক্ষণের জন্য
    'monitor' => [
        'handler' => app\process\Monitor::class, // প্রক্রিয়া প্রক্রিয়াকরণ ক্লাস
        'reloadable' => false, // বর্তমান প্রক্রিয়া reload কার্যকর করবে না
        'constructor' => [ // প্রক্রিয়া প্রক্রিয়াকরণ ক্লাসের কনস্ট্রাক্টর প্যারামিটার
            // শনাক্তকরণ ডিরেক্টরি, অতিরিক্ত না হবে, শনাক্তকরণ ধীর হতে পারে
            'monitorDir' => array_merge([
                app_path(),
                config_path(),
                base_path() . '/process',
                base_path() . '/support',
                base_path() . '/resource',
                base_path() . '/.env',
            ], glob(base_path() . '/plugin/*/app'), glob(base_path() . '/plugin/*/config'), glob(base_path() . '/plugin/*/api')),
            // এই এক্সটেনশনের ফাইলগুলির আপডেট মনিটর করা হবে
            'monitorExtensions' => [
                'php', 'html', 'htm', 'env'
            ],
            // অন্যান্য অপশন
            'options' => [
                // ফাইল মনিটর সক্রিয় আছে কি না, শুধুমাত্র লিনাক্সে কার্যকর, ডিফল্ট ডেমন মোডে ফাইল মনিটর সক্রিয় নয়
                'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
                // মেমোরি মনিটর সক্রিয় আছে কি না, শুধুমাত্র লিনাক্সে সক্রিয়
                'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
            ]
        ]
    ]
];

container.php

// একটি psr-11 নির্ভরতা ইনজেকশন কন্টেইনার উদাহরণ ফেরত দাও
return new Webman\Container;

dependence.php

// নির্ভরতার কন্টেইনারে পরিষেবাগুলি এবং নির্ভরতাগুলির কনফিগারেশন
return [];

route.php


use support\Route;
// /test পাথের রুট নির্ধারণ করুন
Route::any('/test', function (Request $request) {
    return response('test');
});

view.php

use support\view\Raw;
use support\view\Twig;
use support\view\Blade;
use support\view\ThinkPHP;

return [
    'handler' => Raw::class // ডিফল্ট ভিউ প্রক্রিয়াকরণ ক্লাস 
];

autoload.php

// ফ্রেমওয়ার্কের স্বয়ংক্রিয় লোড কনফিগার করুন
return [
    'files' => [
        base_path() . '/app/functions.php',
        base_path() . '/support/Request.php',
        base_path() . '/support/Response.php',
    ]
];

cache.php

// ক্যাশ কনফিগারেশন
return [
    'default' => 'file', // ডিফল্ট ফাইল
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache') // ক্যাশ ফাইল সংরক্ষণের অবস্থান
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default' // redis সংযোগ নাম, redis.php এর কনফিগারেশনের সঙ্গে সঙ্গতিপরায়ণ
        ],
        'array' => [
            'driver' => 'array' // মেমরি ক্যাশ, পুনরায় চালু হলে অকার্যকর
        ]
    ]
];

redis.php

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

database.php

return [
 // ডিফল্ট ডাটাবেস
 'default' => 'mysql',
 // বিভিন্ন ডাটাবেস কনফিগারেশন
 'connections' => [

     'mysql' => [
         'driver'      => 'mysql',
         'host'        => '127.0.0.1',
         'port'        => 3306,
         'database'    => 'webman',
         'username'    => 'webman',
         'password'    => '',
         'unix_socket' => '',
         'charset'     => 'utf8',
         'collation'   => 'utf8_unicode_ci',
         'prefix'      => '',
         'strict'      => true,
         'engine'      => null,
     ],

     'sqlite' => [
         'driver'   => 'sqlite',
         'database' => '',
         'prefix'   => '',
     ],

     'pgsql' => [
         'driver'   => 'pgsql',
         'host'     => '127.0.0.1',
         'port'     => 5432,
         'database' => 'webman',
         'username' => 'webman',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
         'schema'   => 'public',
         'sslmode'  => 'prefer',
     ],

     'sqlsrv' => [
         'driver'   => 'sqlsrv',
         'host'     => 'localhost',
         'port'     => 1433,
         'database' => 'webman',
         'username' => 'webman',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
     ],
 ],
];

exception.php

return [
    // ব্যতিক্রম ব্যবস্থাপনা ক্লাস সেট করুন
    '' => support\exception\Handler::class,
];

log.php

return [
    'default' => [
        'handlers' => [
            [
                'class' => Monolog\Handler\RotatingFileHandler::class, // প্রক্রিয়াকর্তা
                'constructor' => [
                    runtime_path() . '/logs/webman.log', // লগ নাম
                    7, //$maxFiles // 7 দিনের মধ্যে লগ রক্ষা করুন
                    Monolog\Logger::DEBUG, // লগ স্তর
                ],
                'formatter' => [
                    'class' => Monolog\Formatter\LineFormatter::class, // বিন্যাসকারী
                    'constructor' => [null, 'Y-m-d H:i:s', true], // বিন্যাসের প্যারামিটার
                ],
            ]
        ],
    ],
];

session.php

return [
     // ধরন
    'type' => 'file', // অথবা redis অথবা redis_cluster
     // প্রক্রিয়াকর্তা
    'handler' => FileSessionHandler::class,
     // কনফিগারেশন
    'config' => [
        'file' => [
            'save_path' => runtime_path() . '/sessions', // সংরক্ষণ ডিরেক্টরি
        ],
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'auth' => '',
            'timeout' => 2,
            'database' => '',
            'prefix' => 'redis_session_',
        ],
        'redis_cluster' => [
            'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
            'timeout' => 2,
            'auth' => '',
            'prefix' => 'redis_session_',
        ]
    ],
    'session_name' => 'PHPSID', // সেশন নাম
    'auto_update_timestamp' => false, // স্বয়ংক্রিয় সময়লগ্নের আপডেট সক্রিয় আছে কি না, সেশন অকার্যকর হওয়া থেকে রোধ করতে
    'lifetime' => 7*24*60*60, // জীবনকাল
    'cookie_lifetime' => 365*24*60*60, // কুকির জীবনকাল
    'cookie_path' => '/', // কুকির পথ
    'domain' => '', // কুকির ডোমেইন
    'http_only' => true, // শুধুমাত্র http অ্যাক্সেস
    'secure' => false, // শুধুমাত্র https অ্যাক্সেস
    'same_site' => '', // SameSite বৈশিষ্ট্য
    'gc_probability' => [1, 1000], // সেশন পুনরুদ্ধারের সম্ভাবনা
];

middleware.php

// মিডলওয়্যার সেট করুন
return [];

static.php

return [
    'enable' => true, // webman এর স্ট্যাটিক ফাইল অ্যাক্সেস সক্রিয় আছে কি না
    'middleware' => [ // স্ট্যাটিক ফাইল মিডলওয়্যার, ক্যাশ কৌশল, ক্রস-ডোমেইন ইত্যাদি সেট করার জন্য ব্যবহার করা যেতে পারে
        //app\middleware\StaticFile::class,
    ],
];

translation.php

return [
    // ডিফল্ট ভাষা
    'locale' => 'zh_CN',
    // ব্যাকআপ ভাষা
    'fallback_locale' => ['zh_CN', 'en'],
    // ভাষা ফাইল সংরক্ষণ স্থান
    'path' => base_path() . '/resource/translations',
];