# কনফিগারেশন ম্যানেজমেন্ট ফর মাল্টিপল ইনভায়রনমেন্ট

আগের আধ্যায় এ আমরা লারাভেল কিভাবে ইনভায়রনমেন্ট ডিটেক্ট করে তা দেখেছি । এই আধ্যায় এ আমরা ইনভায়রনমেন্ট এর উপর নির্ভর করে কিভাবে কনফিগারেশন লোড হয় এবং আমারা কিভাবে ভিন্ন ভিন্ন ইনভায়রনমেন্ট এর জন্য ভিন্ন ভিন্ন কনফিগারেশন ব্যাবহার করতে পারি তা দেখব।

আপনি হয়ত ইতিমধ্যেই জানেন লারাভেল `app/config` ফোল্ডার থেকে সব কনফিগ ফাইল লোড করে।

ধরা যাক আপনার ইনভায়রনমেন্ট হিসাবে `local` সেট করা আছে। এখন লারাভেল যখন কোন কনফিগ ফাইল লোড করতে যাবে তখন সবার আগে `app/config/local/` ডিরেক্টরি তে খুঁজবে। যদি ওই ডিরেক্টরি তে না পায় তাহলে `app/config/` থেকে লোড করবে।

সো লারাভেল প্রথমে `app/config/ENVIRONMENT_NAME/` ডিরেক্টরি তে কনফিগ ফাইল খুঁজে। যদি না পায় তাহলে রুট কনফিগ ডিরেক্টরি তে যে ডিফল্ট ফাইল থাকে ঐটা লোড করে। আপনার ইনভায়রনমেন্ট এর নামে কনফিগ ডিরেক্টরিতে একটি নতুন ফোল্ডার তৈরি করুন ।

আপনি শুধু যে কনফিগ গুলো চেঞ্জ করতে চান ঐ ফাইল গুলোর ডিফল্ট ভার্শন আপনার ইনভায়রনমেন্ট এর কনফিগ ডিরেক্টরিতে কপি করে প্রয়োজনীয় অংশ চেঞ্জ করতে পারেন ।

যেমন আপনি যদি ডেটাবেজ এর কানেকশন ইনফো চেঞ্জ করতে চান তাহলে তাহলে `app/config/database.php` ফাইলটি `app/config/local/` ডিরেক্টরিতে কপি করুন। তারপর আপনার কানেকশন ইনফো চেঞ্জ করতে পারেন।

এখন ধরুন আপনারা কয়েকজন একটি প্রজেক্ট এ কাজ করছেন তাহলে আপনি যদি পূর্বের টিউটোরিয়ালের মত করে ইনভায়রনমেন্ট সেটআপ করে থাকেন। তাহলে আপনাদের সবার ইনভায়রনমেন্ট `local` হিসাবে সেট হবে। কিন্তু আপনাদের ডাটাবেজ এর কানেকশন ইনফো ভিন্ন হতে পারে।

এই কেইজ টা হান্ডেল করার জন্য লারাভেল এ সুন্দর একটা উপায় আছে। প্রথমে নিচের মত করে `app/local/database.php` ফাইলটি পরিবর্তন করুন।

```
<?php
return array(
    'connections' => array(

        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => getenv('DB_HOST'),
            'database'  => getenv('DB_NAME'),
            'username'  => getenv('DB_USERNAME'),
            'password'  => getenv('DB_PASSWORD'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
         )
    )
  );
```

আপনি যদি ইতিমধ্যেই না জানেন, পিএইচপির `genenv()` ফাংশনটি ইনভায়রনমেন্ট ভ্যারিয়েবল এর ভ্যালু পাওয়ার জন্য ব্যাবহার করা হয়।

এখন লোকাল ইনভায়রনমেন্ট এ আপনি কিভাবে সহজে ইনভায়রনমেন্ট ভ্যারিয়েবল সেট করবেন। আপনি জেনে খুশি হবেন যে লারাভেল এর অথর এইটা নিয়ে ভেবেছে এবং এর জন্য সহজ একটি ব্যাবস্থা রেখেছে।

লারাভেল সিস্টেম এ সহজে ইনভায়রনমেন্ট ভ্যারিয়েবল যোগ করার জন্য আপনি `.evn.{ENVIRONMENT_NAME}.php` নামে একটি ফাইল আপনার প্রজেক্ট এর রুট ডিরেক্টরিতে যোগ করতে পারেন। লারাভেল বুটস্ট্রাপ এর সময় ঐ ফাইল থেকে ভ্যালু গুলো রিড করে ইনভায়রনমেন্ট গ্লোবাল ভ্যারিয়েবল এ যোগ করে দিবে।

সো লোকাল এর জন্য আপনাকে `env.local.php` যোগ করতে হবে। `env.local.php` ফাইলটিতে নিচের মত করে ভ্যালু এড করেতে পারেন।

```
<?php

return [
    'DB_HOST' => 'localhost',
    'DB_NAME' => 'laravel_database_name',
    'DB_USERNAME' => 'db_username',
    'DB_PASSWORD' => 'db_password'
];
```

আপনি ভ্যারিয়েবল এর নাম গুলো দেখে বুঝতে পারবেন আমরা এই নাম এর ভ্যারিয়েবল ডাটাবেজ কনফিগ এ ব্যাবহার করেছি। এই ফাইল আপনি গিট ইগনোর ফাইল এ এড করে আপনাদের ডেটাবেজ এর কনফিগ আলাদা রাখতে পারেন । তাহলে সবাই যার যার নিজের ডাটাবেজ এ কানেক্ট করতে পারবেন কোন ফাইল পরিবরর্তন না করেই।

এখানে বলে রাখা ভাল, আপনি চাইলে লাইভ সাইট এও এইভাবে ডাটাবেজ কনফিগ লোড করতে পারেন। কিন্তু ভাল প্রাকটিস হল কোন ফাইল এ সেন্সেটিভ ইনফো না রাখা। সিস্টেমে ইনভায়রনমেন্ট ভ্যারিয়েবল হিসাবে রাখা অনেক বেশি নিরাপদ।

আরেকটি বিষয় আলোচনা করে আমারা এই অধ্যায় শেষ করব।

অনেক প্যাকেজ এর জন্য আমাদের `app/config/app.php` ফাইল এ `Service Provider` এড করতে হয়। এখন অনেক প্যাকেজ আছে যা আপনি শুধু লোকালি ব্যাবহার করেবেন লাইভ এ দরকার নাই। সেক্ষেত্রে আপনি শুধু `app/config/app.php` ফাইলে নিচের মত করে কনফিগ এপেন্ড করতে পারেন ।

```
<?php

return array(

    'debug' => true,

    'providers' => append_config([
        'Way\Generators\GeneratorsServiceProvider',

    ])

);
```

তাহলে এই জেনারেটর প্যাকেজটি শুধু আপনার লোকাল ইনভায়রনমেন্ট এই কাজ করবে।

লারাভেল কনফিগ ক্যাস্কেডং করে লোড করে। অর্থাৎ লারাভেল এর যখন কোন ভ্যালু দরকার হয় তা প্রথমে `app/config/ENVIRONMENT_NAME/` ফোল্ডার এর মধ্যে খুঁজে এবং ঐখানে না পেলে `app/config/` ফোল্ডার থেকে লোড করে।

বেইজ কনফিগ ফোল্ডার থেকে আপনি যে ফাইলটি পরিবর্তন করতে চান ঐ ফাইলটি আপনার ইনভায়রনমেন্ট ফোল্ডার এ কপি করে প্রয়োজনীয় অংশটুকু পরিবর্তন করে কাজ করতে পারেন।


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://laravel.howtocode.dev/better-environment/configuration-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
